Du leder sandsynligvis efter select_related
, hvilket er den naturlige måde at opnå dette på:
pubs = publication.objects.select_related('country', 'country_state', 'city')
Du kan kontrollere den resulterende SQL via str(pubs.query)
, hvilket skulle resultere i output langs følgende linjer (eksemplet er fra en 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 returnerede markørværdier oversættes derefter til de relevante ORM-modelforekomster, så når du går gennem disse publikationer, får du adgang til de relaterede tabellers værdier via deres egne objekter. Disse adgange langs de forudvalgte fremadrettede relationer vil dog ikke forårsage ekstra db-hits:
{% for p in pubs %}
{{ p.city.city_name}} # p.city has been populated in the initial query
# ...
{% endfor %}