आप शायद select_संबंधित
, जो इसे प्राप्त करने का स्वाभाविक तरीका है:
pubs = publication.objects.select_related('country', 'country_state', 'city')
आप परिणामी SQL को str(pubs.query)
. के माध्यम से जांच सकते हैं , जिसके परिणामस्वरूप निम्न पंक्तियों के साथ आउटपुट होना चाहिए (उदाहरण पोस्टग्रेज बैकएंड से है):
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" )
लौटाए गए कर्सर मानों को तब उपयुक्त ORM मॉडल इंस्टेंस में अनुवादित किया जाता है, ताकि जब आप इन प्रकाशनों पर लूप करते हैं, तो आप संबंधित तालिकाओं के मानों को उनके स्वयं के ऑब्जेक्ट के माध्यम से एक्सेस करते हैं। हालांकि, पूर्व-चयनित अग्रेषित संबंधों के साथ इन पहुंचों के कारण अतिरिक्त डीबी हिट नहीं होंगे:
{% for p in pubs %}
{{ p.city.city_name}} # p.city has been populated in the initial query
# ...
{% endfor %}