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