Anda mungkin mencari select_related
, yang merupakan cara alami untuk mencapai ini:
pubs = publication.objects.select_related('country', 'country_state', 'city')
Anda dapat memeriksa SQL yang dihasilkan melalui str(pubs.query)
, yang akan menghasilkan output di sepanjang baris berikut (contohnya dari backend 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" )
Nilai kursor yang dikembalikan kemudian diterjemahkan ke dalam contoh model ORM yang sesuai, sehingga saat Anda mengulang publikasi ini, Anda mengakses nilai tabel terkait melalui objeknya sendiri. Namun, akses ini di sepanjang hubungan penerusan yang telah dipilih sebelumnya tidak akan menyebabkan hit db tambahan:
{% for p in pubs %}
{{ p.city.city_name}} # p.city has been populated in the initial query
# ...
{% endfor %}