Você está na página 1de 5

Bacharelado em

Sistemas de Informação

Avaliação de Desempenho
de Sistemas

Tutorial sobre o relacionamento entre


modelos

Aluno: Stewen Soares Ascari

Período: 2017.1

Professor: Yuri malheiros

Novembro, 2017
Em seus projeto no Django você vai precisar utilizar os modelos que são oferecidas para que
a sua aplicação se comunique com o banco de dados, dependendo da sua aplicação você
pode usar um dos três tipos de relacionamento que existe entre modelos.

Essas formas de definição dos relacionamento que existe no django são para que você
consiga deixar em harmonia os relacionamentos das tabelas no banco de dados. Como falado
antes, existem três forma de definir os relacionamentos, que são: one to one ( um para um),
many to one ( muitos para um) e many to many ( muitos para muitos).

Bom, vamos para a explicação dessas três formas.

Na sua aplicação vai ter uma file chamado models.py e é lá que você vai fazer seus modelos
para a sua aplicação. Dentro do file você define os modelos que terá a sua aplicação( as
classes), como por exemplo: quero fazer um modelo pessoas e outra de cpf, o relacionamento
desses modelos que tô criando vai ser one to one( um para um), percebe-se que vai existir
apenas uma pessoa para um cpf e um cpf para uma pessoa, certo? se caso ainda não
entendeu pense da seguinte forma, o cpf é como se fosse uma coisa única de cada uma das
pessoas. veja a figura a seguir

Figura I- modelos pessoas e cpf

Pronto, os modelos foram criados mas ainda não tem relação entre eles, para que tenha um
relacionamento você vai usar o atributo OneToOneField. Ele deve ser usado como qualquer
outro Field, ou seja, deve ser incluído como qualquer atributo de classe.

Percebe-se que existe outra dúvida, qual dos modelos criados se deve colocar o
relacionamento( já que ele deve ser colocado no modelo como qualquer atributo de classe)?
Para responder a isso pense o seguinte, no mundo real existe um pessoa que não tem cpf
mas o cpf não vai existir se não tiver uma pessoa vinculada a ele. Pensando dessa forma,
devemos colocar o relacionamento sempre no modelo que é dependente da outra, que no
nosso caso é o cpf. veja o resultado a seguir.

Figura II- aplicando o relacionamento nos modelos

Pronto, você acabou de aprender o primeiro relacionamento dos modelos. :D


O relacionamento dos modelos que quero na minha aplicação agora é many to one( vários
para um). Vamos fazer o seguinte cenário para entender melhor esse relacionamento: em
uma empresa de ônibus tem vários ônibus mas um ônibus tem apenas uma empresa, vamos
ver como ficou esses modelos.

Figura III- modelos EmpresaBus e Bus

Pronto, os modelos foram criados mas percebe-se que eles estão sem o relacionamento,
para que eles tenham um relacionamento você deve colocar o seguinte atributo:
ForeignKey. Assim como no outro, ele deve ser usado como qualquer outro Field.

Percebe-se que temos o mesmo problema do outro relacionamento, onde devemos incluir o
atributo do relacionamento dos modelos? Bom, não devemos usar a lógica que usamos no
outro, porque mesmo uma empresa não tendo um ônibus ela vai existir e isso se aplica ao
ônibus também. Então, aonde colocar? Nesse caso, devemos colocar sempre no modelo do
muitos.

Voltando para o nosso cenário, esse modelo onde o relacionamento ficaria seria a do ônibus,
porque não tem lógica se tivesse várias empresas para um ônibus e sim vários ônibus para
uma empresa. Vamos ver como ficou o nosso modelo

Figura IV- aplicando o relacionamento nos modelos

Pronto, você acabou de aprender o segundo relacionamento dos modelos. :D

Agora vamos para o nosso último relacionamento dos modelos :/

O relacionamento dos modelos que vamos usar agora na minha aplicação é many to
many( muitos para muitos). Assim como nos outros, vamos usar um cenário para que
você entenda melhor esse relacionamento. O cenário seria: em um curso vai ter várias
disciplinas e terá também vários alunos, uma disciplina pode ser cursada por vários alunos
e vários alunos pode se cadastrar em um disciplina, aplicando então o relacionamento de
many to many( muitos para muitos). Vamos ver como ficou esses modelos
Figura III- modelos Alunos e Disciplinas

Assim como nos outros, eu criei os modelos mas não coloquei nenhum relacionamento neles,
o atributo que devemos colocar para que tenha um relacionamento é ManyToManyField.
Assim como no outro, ele deve ser usado como qualquer outro Field.

O mesmo problema é apresentado aqui, onde devemos colocar ele? devemos seguir a
mesmo lógica que foi mostrada aqui do Many to one ou a do one to one? Vamos analisar,
uma disciplina vai existir se não tiver nenhum aluno cursando ela, da mesma forma que vai
existir alunos não cadastrado em uma disciplina, desse jeito podemos tirar a lógica de one to
one.

Como falado antes, uma disciplina não depende dos alunos para existir nem os alunos
depende da disciplina, ou seja, também a do many to one não pode ser aplicado. Mas e
agora? qual dos dois modelos devemos colocar o atributo ManyToManyField? A resposta é
simples, não tem diferença em você colocar em alunos ou em disciplinas, porém, na
documentação do django tem uma referência que diz que você deve colocar no modelo que
for cadastrar no formulário.

Como assim? modelo que for cadastrado no formulário? sim, por exemplo: se eu quero que
uma disciplina mostre os alunos que ta cadastrado nela, eu coloco o atributo de
relacionamento no modelo disciplinas mas se caso eu queira mostrar ao aluno as disciplina
que ele ta cadastrado, eu coloco o atributo de relacionamento no modelo aluno. Então,
podemos dizer que isso vai depender da sua aplicação e o que você vai querer mostrar nela.

Na minha aplicação, vou querer exibir ao aluno as disciplinas que ele ta cadastrado, então eu
vou colocar o atributo de relacionamento nele. Vamos ver como ficou o nosso modelo

Pronto, agora você tá possibilitado de criar vários relacionamentos entre os modelos, vale
lembrar que esses relacionamento vai depender de cada aplicação, viu? :D
Os relacionamento entre os modelos explicado aqui é uma forma de você entender como é o
relacionamento do banco de dados no Django, também é uma forma de organizar bem as
relações entre seus modelos.

Você também pode gostar