В Django для данной модели похоже, что RelatedManager
может быть установлен только статически (см. документы), но есть ли способ установить order_by
в связанном менеджере для данного набора запросов? Я пытался использовать prefetch_related
и Prefetch
, но это не работает:
qs = qs.prefetch_related(
Prefetch('item_set', queryset=Item.objects.order_by('capture_dt').all()))
res = qs.first().item_set.all().ordered
В данном случае res
равно False
.
Проблема возникает, когда я пытаюсь получить доступ к соответствующему менеджеру: доступ без order_by
не вызывает другого SQL-запроса, тогда как если я затем пытаюсь order_by
, выполняется дополнительный запрос, который вызывает выполнение N + 1
SQL-запросов.
Эти две строки возвращают одинаковые результаты, но первая генерирует гораздо меньше SQL-запросов:
r0 = [x.pk for x in sorted(self.parent.item_set.all(), key=lambda s: s.capture_dt)].index(self.pk)
r1 = list(x.pk for x in self.parent.item_set.order_by('capture_dt').all()).index(self.pk)
.order_by('fkmodel__field')
?.. - person Sayse   schedule 05.02.2016qs
). Я просто хочу упорядочить элементы вitem_set
для каждой записи вqs
. - person Alex Rothberg   schedule 05.02.2016