2024-04-19 03:51:01 发布
网友
如果给定的order_by字段的值对于一组记录是相同的,我想知道Django的order_by是如何工作的。假设我在DB中有一个score字段,我正在使用order_by('score')过滤queryset。分数值相同的记录如何排列?
order_by
score
order_by('score')
每次,它们都是在等分记录的子集内随机排序的,这就打破了客户端的分页。有没有办法覆盖它并以一致的顺序返回记录?
我用的是Django 1.4和PostgreSQL。
正如其他答案正确解释的那样,order_by()接受多个参数。我建议你用这样的方法:
order_by()
qs.order_by('score','pk') #where qs is your queryset
在这些情况下,我建议使用'pk'(或'-pk')作为最后一个参数,因为每个模型都有一个pk字段,并且它的值对于两个记录都不相同。
'pk'
'-pk'
pk
如果我理解正确,我认为您每次都需要一致的排序结果集,您可以使用像order_by('score','id')这样的东西,它将首先按分数排序,然后按具有相同值的score中的自动增量id排序,因此您的输出是一致的。文档是here。如果每次都要获取正确的结果集,则需要按顺序显式显示,使用“id”是一种方法。
order_by('score','id')
id
order_by可以有多个参数,我认为order_by('score', '-create_time')将始终返回相同的queryset。
order_by('score', '-create_time')
正如其他答案正确解释的那样,
order_by()
接受多个参数。我建议你用这样的方法:在这些情况下,我建议使用
'pk'
(或'-pk'
)作为最后一个参数,因为每个模型都有一个pk
字段,并且它的值对于两个记录都不相同。如果我理解正确,我认为您每次都需要一致的排序结果集,您可以使用像
order_by('score','id')
这样的东西,它将首先按分数排序,然后按具有相同值的score
中的自动增量id
排序,因此您的输出是一致的。文档是here。如果每次都要获取正确的结果集,则需要按顺序显式显示,使用“id”是一种方法。order_by
可以有多个参数,我认为order_by('score', '-create_time')
将始终返回相同的queryset。相关问题 更多 >
编程相关推荐