1
resposta

Relacionamento entre Models

Guilherme,

Sempre que eu precisar fazer algum relacionamento entre classes terá que criar um novo app como você fez entre Receita e Pessoa? Posso simplesmente colocar todas as Classes dentro do models.py?

1 resposta

Olá Francisco, tudo bem com você?

Peço desculpas pela demora no retorno.

Podemos criar sim múltiplas tabelas (classes) dentro do arquivo models.py presente em nossos apps, e criarmos relacionamentos entre elas, sem que estejam em um outro arquivo models.py ou que pertençam a outro app. Abaixo um exemplo de relacionamento entre tabelas presente no mesmo arquivo models.py.

from django.db import models
class Fabicante(models.Model):
    pass

class Carro(models.Model):
    fabricante = models.ForeignKey(Fabicante, on_delete=models.CASCADE)

Acima, as duas classes estão relacionadas aos carros, caso formos criar uma tabela para cadastro de funcionários não é recomendado mantermos no mesmo app e pasta models.py, por possuírem responsabilidades diferentes.

No exemplo apresentado na aula, fazer esse relacionamento não seria uma boa prática de programação, por boas práticas um app deve possuir uma única e exclusiva responsabilidade, assim se criarmos um modelo para a Pessoa, dentro do arquivo models.py do app Receitas, estariamos atribuindo uma segunda responsabilidade para o app Receitas, responsabilidade essa de manter e gerenciar as pessoas.

Tomando como exemplo o app receitas, esse app tem como responsabilidade gerenciar o cadastro, exibição e manutenção das receitas. Note que temos bem definido o que esse app irá realizar. As receitas possuem os seguintes campos que compõem a tabela para cadastro, como por exemplo.

  • nome_receita
  • ingredientes
  • modo_preparo
  • tempo_preparo

Note que os campos possuem um padrão que segue o objetivo do app, cadastro e gerenciamento de receitas.

O app pessoas, possui a responsabilidade de gerenciar o cadastro, exibição e manutenção das pessoas que fazem o cadastro das receitas. O app pessoas possui os seguintes campos que compõem a tabela para cadastro.

  • nome
  • email

Esses campos estão estritamente relacionados a uma pessoa, mantendo uma coesão na responsabilidade do app.

Para aprimorar ainda mais o seu aprendizado sobre boas práticas no uso modelos do Django, recomendo a leitura do seguinte artigo, que apresenta 28 tópicos importantes sobre o uso dos modelos.

E para conhecer um pouco mais sobre os relacionamentos em Django você pode realizar a leitura da documentação, onde é apresentado com detalhes sobre as possibilidades de relacionamentos e como realizá-los.

O artigo e a documentação estão em inglês, caso tenha dificuldade com o idioma, recomendo o uso do tradutor do navegador.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software