"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como realizar uma junção interna no Django usando `select_related`?

Como realizar uma junção interna no Django usando `select_related`?

Publicado em 2024-11-04
Navegar:222

How to Perform an Inner Join in Django Using `select_related`?

Como executar uma junção interna no Django

Para mostrar os dados interconectados de múltiplas tabelas em seu aplicativo Django, você pode encontrar a necessidade para executar uma operação de junção interna. Aproveitando o método select_related, você pode conseguir isso sem esforço.

Considere o seguinte cenário: você deseja exibir os nomes de cidade, estado e país de uma publicação em um modelo HTML. No entanto, esses detalhes são armazenados em tabelas separadas. Para recuperar essas informações usando uma junção interna, você pode utilizar o método select_related da seguinte forma:

pubs = publication.objects.select_related('country', 'country_state', 'city')

Esta consulta irá gerar uma instrução SQL semelhante a esta:

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" ) 

Os valores recuperados serão automaticamente convertidos em instâncias do modelo ORM. Isso permite que você acesse os valores da tabela relacionada por meio de seus respectivos objetos dentro de um loop, conforme demonstrado abaixo:

{% for p in pubs %}
     {{ p.city.city_name}}  # p.city has been populated in the initial query
     # ...
{% endfor %}

Ao empregar essa técnica, você pode buscar dados de diversas tabelas com eficiência e apresentar informações interconectadas em seus modelos HTML, evitando ocorrências adicionais no banco de dados para relações futuras pré-selecionadas.

Tutorial mais recente Mais>

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