Representam o relacionamento de um para muitos no Django

Vaibhav Vaibhav 30 janeiro 2023
  1. Representar o relacionamento de um para muitos usando um modelo de junção / intermediário
  2. Representar relacionamentos de um para muitos usando chaves estrangeiras
Representam o relacionamento de um para muitos no Django

Os bancos de dados desempenham um papel fundamental em quase todos os lugares, e não é surpresa que o desenvolvimento web seja um desses lugares. Construir tabelas e configurar relacionamentos entre tabelas usando SQL é uma tarefa simples, mas o Django torna ainda mais simples.

Este artigo irá apresentar como representar um para muitos relacionamentos no Django.

Representar o relacionamento de um para muitos usando um modelo de junção / intermediário

Consulte as seguintes definições dos modelos.

class Number(models.Model):
    number = models.CharField(max_length=10)


class Person(models.Model):
    name = models.CharField(max_length=200)


class PersonNumber(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="numbers")
    number = models.ForeignKey(Number, on_delete=models.CASCADE, related_name="person")

O modelo Number possui um campo number para armazenar um número de telefone.

O modelo Person possui um campo name para o nome da pessoa.

PersonNumber é uma junção ou modelo intermediário para Number e Person. As chaves estrangeiras têm um relacionamento em cascata com os objetos referidos. Este modelo pode ser usado para configurar um relacionamento um-para-muitos, bem como um relacionamento muitos-para-muitos.

A chave primária padrão para todos os modelos é id, um campo automático inteiro.

Como um número de telefone está associado apenas a uma única pessoa, mas uma pessoa pode ter mais de um número de telefone, esse é um relacionamento de um para muitos. PersonNumber será usado para representar esta relação.

Se uma variável person está armazenando um objeto Person, podemos acessar facilmente todos os números de telefone dessa pessoa usando a seguinte instrução.

numbers = person.numbers.objects.all()

Esta instrução retornará um QuerySet de objetos Number.

Considere este exemplo.

ID Person Number
1 1 1
2 1 2
3 1 3
4 1 4
5 2 5
6 2 6
7 3 7

Uma pessoa com id 1 tem quatro números de telefone com id 1, 2, 3 e 4.
Uma pessoa com id 2 tem dois números de telefone com id 5 e 6.
Uma pessoa com id 3 tem apenas um número de telefone com id 7.

Representar relacionamentos de um para muitos usando chaves estrangeiras

Consulte as seguintes definições dos modelos.

class Person(models.Model):
    name = models.CharField(max_length=200)


class Number(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    number = models.CharField(max_length=10)

O modelo Person possui um campo name para o nome da pessoa.

O modelo Number possui um campo number para armazenar um número de telefone e uma referência de chave estrangeira para o modelo Person. Este campo armazenaria o dono deste número. A chave estrangeira tem um relacionamento em cascata com o modelo referenciado, Person.

Usando esta estrutura, podemos facilmente associar cada objeto Number com seu respectivo proprietário usando a referência de chave estrangeira.

Se uma variável person está armazenando um objeto Person, podemos acessar todos os números associados a essa pessoa usando a seguinte instrução.

numbers = Number.objects.filter(person=person)

Esta instrução retornará um QuerySet de objetos Number.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.