如果给定的order_by
字段的值对于一组记录是相同的,我想知道Django的order_by
是如何工作的。考虑我在DB中有一个score
字段,我正在使用order_by('score')
过滤查询集。具有相同分数值的记录如何自行排列?
每次,他们都会在具有相同分数的记录子集中随机排序,这打破了客户端的分页。有没有办法覆盖它并以一致的顺序返回记录?
我正在使用Django 1.4和PostgreSQL。
答案 0 :(得分:11)
正如其他答案正确解释的那样,order_by()
接受多个参数。我建议使用类似的东西:
qs.order_by('score','pk') #where qs is your queryset
我建议在这些情况下使用'pk'
(或'-pk'
)作为最后一个参数,因为每个模型都有一个pk
字段,并且它的值对于2条记录永远不会相同。 / p>
答案 1 :(得分:10)
order_by
可以有多个参数,我认为order_by('score', '-create_time')
将始终返回相同的查询集。
答案 2 :(得分:2)
如果我理解正确,我认为您每次都需要一致排序的结果集,您可以使用order_by('score','id')
之类的内容,首先按照分数排序,然后按自动增量id
进行排序score
具有相同的值,因此您的输出是一致的。文档是here。如果你想每次都获取正确的结果集,你需要在order_by中明确,使用'id'是其中一种方法。