Wahrscheinlich suchen Sie nach select_related
, was der natürliche Weg ist, dies zu erreichen:
pubs = publication.objects.select_related('country', 'country_state', 'city')
Sie können das resultierende SQL über str(pubs.query)
überprüfen , was zu einer Ausgabe der folgenden Zeilen führen sollte (das Beispiel stammt von einem 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" )
Die zurückgegebenen Cursorwerte werden dann in die entsprechenden ORM-Modellinstanzen übersetzt, sodass Sie beim Durchlaufen dieser Veröffentlichungen über ihre eigenen Objekte auf die Werte der zugehörigen Tabellen zugreifen. Diese Zugriffe entlang der vorausgewählten Vorwärtsbeziehungen werden jedoch keine zusätzlichen db-Treffer verursachen:
{% for p in pubs %}
{{ p.city.city_name}} # p.city has been populated in the initial query
# ...
{% endfor %}