【发布时间】:2016-01-02 18:34:33
【问题描述】:
Django docs 说:
...即使对未评估的 QuerySet 进行切片会返回另一个未评估的 QuerySet,但不允许进一步修改它(例如,添加更多过滤器或修改排序),因为这不能很好地转换为 SQL 并且它不会有明确的意思是。
从这里我认为它意味着做这样的事情:
q1 = Pizza.objects.all()[0:5]
q2 = q1.order_by(...)
不允许。我有两个问题:
- 文档为什么这么说?我可以理解,也许它不能很好地转换为 SQL,但对我来说,“明确的含义”是您获得前 5 个比萨饼对象,然后按任何标准对它们进行排序。
- 如果你这样做会发生什么?我已经做了一段时间了,代码是正确的(但速度很慢)。它实际上是反向执行的——对所有
Pizza对象进行排序,然后得到前 5 个?
【问题讨论】: