Django - order_by如何工作?

时间:2012-10-08 05:34:48

标签: python django postgresql sql-order-by

如果给定的order_by字段的值对于一组记录是相同的,我想知道Django的order_by是如何工作的。考虑我在DB中有一个score字段,我正在使用order_by('score')过滤查询集。具有相同分数值的记录如何自行排列?

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

我正在使用Django 1.4和PostgreSQL。

3 个答案:

答案 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'是其中一种方法。