Aula 37 - Loja Online - Django - Foreign Keys tag_set
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Esse é o link do código fluente no Pinterest
Meus links de afiliados:
Melhore seu NETWORKING
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
E também para me seguir no GITHUB.
Ah, se puder, clica na estrela nos meus repositórios pra dá uma força ao meu perfil no GITHUB
Código final da aula:
Intro à Foreign Keys (tag_set)
Na aula passada a gente criou o
app tags, cadastramos algumas
tags e associamos a alguns
produtos.
A relação entre esses dois componentes do nosso projeto é de muitos para muitos, isto é,
ManyToMany.
As
Foreign Keys servem para associar uma tabela a outra, mas, no caso de relação
ManyToMany, temos uma tabela intermediária, para fazer a associação correta.
A relação é
ManyToMany, porque um produto pode estar associado a várias
Tags diferentes, assim como uma
Tag pode estar associada a muitos produtos diferentes.
Veja na figura abaixo, um exemplo, onde temos a relação muito para muitos entre
Order e
Product.
Prática
Deixe um
shell aberto com o servidor rodando.
Para isso, ative o ambiente virtual como explicado em aulas anteriores, entre na pasta
src e digite:
python manage.py runserver
Agora abra outro
terminal, ative seu ambiente virtual nele também, entre na pasta onde fica o
manage.py, isto é, a pasta
src e digite:
python manage.py shell
O
prompt vai ficar assim:
>>>
Agora podemos digitar alguns comandos e tentar entender um pouco mais a relação ManyToMany entre
Product e
Tag.
Comandos usados nessa aula:
'''
# Shell session 1
# python manage.py shell
'''
from tags.models import Tag
qs = Tag.objects.all()
print(qs)
white = Tag.objects.last()
white.title
white.slug
white.active
# A saída é um gerenciador de muitos para muitos#
# many to many manager
white.products
"""
<django.db.models.fields.related_descriptors.create_forward_many_to_many_manager..ManyRelatedManager object at 0x7fa2e27707f0>
"""
white.products.all()
"""
Queryset de PRODUCTS, muito parecido com Products.objects.all (),
mas, neste caso, são TODOS os produtos que estão relacionados à tag "White"
"""
white.products.all().first()
"""
returna a primeira instância, se tiver
"""
exit()
'''
# Shell session 2
# python manage.py shell
'''
from products.models import Product
qs = Product.objects.all()
qs
tshirt = qs.first()
tshirt
tshirt.title
tshirt.description
tshirt.tag
"""
Lança um error porque o Product model não tem o campo "tag"
"""
tshirt.tags
"""
Lança um error porque o Product model não tem o campo "tags"
"""
tshirt.tag_set
"""
Isso funciona porque o modelo de Tag tem o campo "products" com o ManyToMany para o Product
<django.db.models.fields.related_descriptors.create_forward_many_to_many_manager..ManyRelatedManager object at 0x7fd2e9879f98>
"""
tshirt.tag_set.all()
"""
Retorna um Queryset do modelo Tag, relacionado a este produto
"""
tshirt.tag_set.filter(title__iexact='azul')
É isso pessoal, nos vemos na próxima!
Código final da aula:
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Link do código fluente no Pinterest
Novamente deixo meus link de afiliados:
Obrigado, até a próxima e bons estudos. ;)