Вы можете проходить через все отношения настолько глубоко, насколько хотите, просто через стандартный API Django. select_related
не делает ничего особенного в установлении отношений; он просто позволяет вам уменьшить количество запросов к БД, выполняя заранее соединения (вместо того, чтобы искать каждый внешний ключ по мере его обращения).
Однако, как указано в документации, select_related
работает только с внешними ключами и OneToOneFields. Это не работает с ManyToManyFields вообще. Кроме того, вы можете отслеживать обратную связь только с select_related
, если это OneToOneField. Обратные ForeignKeys не поддерживаются. Наконец, по умолчанию select_related
следует только за полями, которые имеют null=False
. Если это поле с нулевым значением, вы должны явно указать select_related
, что следует за ним:
SomeModel.objects.select_related('some_nullable_field')
Как только Django 1.4 попадет, вы получите доступ к новому методу prefetch_related
, который работает как select_related
, но поддерживает ManyToManyFields и обратные отношения ForeignKey.