在 Django 中,在给定模型上,它看起来RelatedManager
只能静态设置(参见:docs),但是有没有办法在order_by
给定查询集的相关管理器上设置?我尝试使用prefetch_related
and 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
。
当我尝试访问相关管理器时出现问题:访问 w/oorder_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)