8

order_by如果一组记录的给定order_by字段的值相同,我想知道 Django 的工作原理。考虑我score在 DB 中有一个字段,我正在使用order_by('score'). 具有相同 score 值的记录将如何排列自己?

每次,它们都会在具有相同分数的记录子集中随机排序,这会破坏客户端的分页。有没有办法覆盖它并以一致的顺序返回记录?

我正在使用 Django 1.4 和 PostgreSQL。

4

3 回答 3

16

正如其他答案正确解释的那样,order_by()接受多个参数。我建议使用类似的东西:

qs.order_by('score','pk') #where qs is your queryset

在这些情况下,我建议使用'pk'(or '-pk') 作为最后一个参数,因为每个模型都有一个pk字段,并且它的值对于 2 条记录永远不会相同。

于 2012-10-08T07:17:28.413 回答
14

order_by可以有多个参数,我认为order_by('score', '-create_time')总是会返回相同的查询集。

于 2012-10-08T05:45:54.653 回答
2

如果我理解正确,我认为您每次都需要一致排序的结果集,您可以使用类似的东西order_by('score','id')首先按分数排序,然后按具有相同值的自动增量排序,因此您的输出是一致的idscore文档在这里。如果您想每次都获取正确的结果集,则需要在 order_by 中明确,使用“id”是其中一种方法。

于 2012-10-08T05:45:22.517 回答