Django - order_by如何工作?

Bab*_*abu 5 python django postgresql sql-order-by

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

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

我正在使用Django 1.4和PostgreSQL.

Anu*_*pta 12

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

qs.order_by('score','pk') #where qs is your queryset
Run Code Online (Sandbox Code Playgroud)

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

  • 对于OP的需求,这两个答案都不完全准确.`order_by('id','score')`首先按'id'排序,然后按'score'排序,这不是他需要的.`order_by('score',' - create_time')`不准确,因为它使用的是未知列.使用普遍的'pk`提到的答案都没有. (6认同)

iMo*_*om0 11

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