Смотрите это:
http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4
Вы создаете набор запросов select_related
для отслеживания отношений и предварительной выборки связанных строк.
Обычно вы не тратите много времени на это, пока не узнаете, что отдельные выборки, автоматически выполняемые ORM, слишком медленные.
Когда вы просто называете поле связанного объекта:
x = MainTable.objects.get( id="some Object" )
y= x.subTable
ORM выполнит соответствующую строку вспомогательной таблицы. лениво.
Вы не можете легко загрузить всю таблицу в память. QuerySets являются «ленивыми» и не извлекают строки, пока нет возможных оправданий. Учти это.
for m in MainTable.objects.all():
y = m.subTable
if y.someAttribute > 5:
break
Тогда вам могут не понадобиться все объекты в MainTable
. Набор запросов готов к их извлечению. Это на самом деле не приносит их всех. Вот почему мы обычно не делаем ничего, кроме x.subTable
, и оставляем это ORM для выборки строки по мере необходимости.
Время от времени вы можете доказать, что это слишком медленно. Затем вы можете выполнить MainTable.objects.select_related()...
и принудительно перейти к строкам в других таблицах.