...即使切片未评估的QuerySet返回另一个未评估的QuerySet,也不允许进一步修改它(例如,添加更多过滤器或修改排序),因为这不能很好地转换为SQL并且它不会很清楚意思是。
从这一点来看,我认为这意味着做这样的事情:
q1 = Pizza.objects.all()[0:5]
q2 = q1.order_by(...)
是不允许的。我有两个问题:
Pizza
个对象,然后获取前5个?答案 0 :(得分:6)
编写ORM代码时,它实际上与SQL语法相对应。特别是,ORM产生错误的SQL语法。当然它会导致错误。
这是您的查询集:
q1 = Pizza.objects.all()[0:5]
q2 = q1.order_by(...)
相应的SQL语法:
SELECT * FROM Pizza limit 5 order by your_column
所以这是一个明显的错误。
代码如何更正ORM?根据您的要求,我建议您跟进:
q1 = Pizza.objects.all()[0:5]
q2 = q1.sorted(q1, key=lambda x: x.your_column)
它会让你期待。
我建议您在order by
之前使用slice
作为以下内容:
q1 = Pizza.objects.all().order_by(...)[0:5]