U zoekt waarschijnlijk naar select_related
, wat de natuurlijke manier is om dit te bereiken:
pubs = publication.objects.select_related('country', 'country_state', 'city')
U kunt de resulterende SQL controleren via str(pubs.query)
, wat zou moeten resulteren in uitvoer volgens de volgende regels (het voorbeeld is van een postgres-backend):
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" )
De geretourneerde cursorwaarden worden vervolgens vertaald naar de juiste ORM-modelinstanties, zodat wanneer u deze publicaties doorloopt, u via hun eigen objecten toegang krijgt tot de waarden van de gerelateerde tabellen. Deze toegangen langs de vooraf geselecteerde forward-relaties zullen echter geen extra db-treffers veroorzaken:
{% for p in pubs %}
{{ p.city.city_name}} # p.city has been populated in the initial query
# ...
{% endfor %}