Django-如何按工作顺序订购?

2024-04-19 03:51:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

每次,它们都是在等分记录的子集内随机排序的,这就打破了客户端的分页。有没有办法覆盖它并以一致的顺序返回记录?

我用的是Django 1.4和PostgreSQL。


Tags: django客户端dbby排序顺序postgresql记录
3条回答

正如其他答案正确解释的那样,order_by()接受多个参数。我建议你用这样的方法:

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

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

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

order_by可以有多个参数,我认为order_by('score', '-create_time')将始终返回相同的queryset。

相关问题 更多 >