Có thể bạn đang tìm kiếm select_related
, đó là cách tự nhiên để đạt được điều này:
pubs = publication.objects.select_related('country', 'country_state', 'city')
Bạn có thể kiểm tra SQL kết quả qua str(pubs.query)
, sẽ dẫn đến kết quả đầu ra dọc theo các dòng sau (ví dụ là từ chương trình phụ trợ 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" )
Các giá trị con trỏ trả về sau đó được dịch sang các phiên bản mô hình ORM thích hợp, để khi bạn lặp lại các ấn phẩm này, bạn truy cập các giá trị của bảng liên quan thông qua các đối tượng của chính chúng. Tuy nhiên, những truy cập này cùng với các quan hệ chuyển tiếp đã chọn trước sẽ không gây ra thêm db lần truy cập:
{% for p in pubs %}
{{ p.city.city_name}} # p.city has been populated in the initial query
# ...
{% endfor %}