Aula 37 – Loja Online – Django – Breve intro de Foreign Keys

Aula 37 – Loja Online – Django – Foreign Keys tag_set

Componente Tag

Componente Tag

Voltar para página principal do blog

Todas as aulas desse curso

Aula 36               Aula 38

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:

Hostinger

Digital Ocean

One.com

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:

https://github.com/toticavalcanti/django_ecommerce/tree/tags

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.

Muitos para muitos

Muitos para muitos foreign keys

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!

Aula 36               Aula 38

Todas as aulas desse curso

Voltar para página principal do blog

Código final da aula:

https://github.com/toticavalcanti/django_ecommerce/tree/tags

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:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. 😉

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>