Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como fazer um Inner Join no django?


Você provavelmente está procurando por select_related , que é a maneira natural de conseguir isso:
pubs = publication.objects.select_related('country', 'country_state', 'city')

Você pode verificar o SQL resultante via str(pubs.query) , que deve resultar na saída nas seguintes linhas (o exemplo é de um back-end postgres):
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 de cursor retornados são então traduzidos para as instâncias de modelo ORM apropriadas, de modo que, ao fazer um loop nessas publicações, você acesse os valores das tabelas relacionadas por meio de seus próprios objetos. No entanto, esses acessos ao longo das relações de encaminhamento pré-selecionadas não causarão acertos db extras:
{% for p in pubs %}
     {{ p.city.city_name}}  # p.city has been populated in the initial query
     # ...
{% endfor %}