我需要订购.order_by()返回的对象,以便它们的“status”字段为5 的所有对象都将在最后。怎么做?
答案 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')
这样您就可以创建自定义排序字段,True
和status = 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