Para exibir dados de múltiplas tabelas relacionadas no Django, muitas vezes é necessária uma junção interna. Neste artigo, exploraremos como realizar uma junção interna usando o ORM (Mapeador Objeto-Relacional) do Django.
Model Relationships
Os models.py no o código fornecido define os seguintes relacionamentos de tabela:
Inner Join Usando select_related
Para obter um efeito de junção interna, o método select_related do Django pode ser empregado. Ele pré-seleciona os objetos relacionados junto com os objetos primários, reduzindo o número de consultas ao banco de dados necessárias para acessar os dados relacionados.
No views.py, o código a seguir pode ser usado para realizar uma junção interna:
pubs = publication.objects.select_related('country', 'country_state', 'city')
Inspecionando o SQL gerado
Usando str(pubs.query), a consulta SQL gerada pode ser inspecionada. Será semelhante à consulta SQL fornecida, com junções internas entre as tabelas:
SELECT "publication"."id", "publication"."title", ..., "country"."country_name", ... FROM "publication" INNER JOIN "country" ON ( "publication"."country_id" = "country"."id" ) INNER JOIN "countrystate" ON ( "publication"."countrystate_id" = "countrystate"."id" ) INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" )
Acessando dados relacionados
Após a junção interna, o os dados relacionados podem ser acessados por meio dos respectivos atributos do objeto do modelo. Por exemplo, para exibir o nome da cidade de cada publicação:
{% for p in pubs %} {{ p.city.city_name}} # p.city has been populated in the initial query # ... {% endfor %}
Ao utilizar o select_related do Django, as junções internas podem ser implementadas de forma eficiente para recuperar dados de tabelas relacionadas, reduzindo consultas ao banco de dados e melhorando o desempenho.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3