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