Django - 如何按特定顺序排序对象?

时间:2015-03-04 12:48:08

标签: python django

我需要订购.order_by()返回的对象,以便它们的“status”字段为5 的所有对象都将在最后。怎么做?

2 个答案:

答案 0 :(得分:3)

您可以在查询集中使用多个order_by字段。因此,如果5是您可以使用的status字段的最大值:

qs.order_by(..., 'status')

否则您应该使用queryset' extra

select={'custom_sort_field': 'status=5'}
qs.extra(select=select).order_by(other_order_by_field, 'custom_sort_field')

这样您就可以创建自定义排序字段,Truestatus = 5时为False。因此,当您按此字段排序时,True值会以True > False结尾。

答案 1 :(得分:0)

您无法在数据库级别执行此操作,但您可以获取所有记录,然后在Python中进行排序:

object_list = sorted(MyModel.objects.all(), key=lambda obj: 999 if obj.status == 5 else obj.status)

这将按status对对象进行排序,但status==5的对象将被假定为等于999的状态,因此移动到最后。这显然假设您没有status >= 999

的任何对象