order_by() (docs) 将遵守您输入参数的顺序。
编辑
这有点时髦,但是这样做应该可以满足您的需求:
你可以这样排序:
funky_queryset = MyModel.objects.filter(name="john")
funky_queryset |= MyModel.objects.filter(other_condition)
...
funky_queryset 将按照您向其中添加更多项目的顺序排列。 |= 运算符可让您组合查询集。
另一个例子:
假装你有这个要排序的查询集:
[<James Bond >, <Bart Simpson >, <John Jacob >, <John Stamos >, <Max Payne >]
假设conditionA 是您想要拥有name="john",conditionB 是您想要拥有name="max",条件C 是您想要所有其他人。你可以这样做:
from django.db.models import Q
sorted_queryset = MyModel.objects.filter(name="john") # conditionA
sorted_queryset |= MyModel.object.filter(name="max") # conditionB
sorted_queryset |= MyModel.objects.exclude(Q(name="john") | Q(name="max")) # conditionC
结果将是[<John Jacob>, <John Stamos>, <Max Payne>, <Bart Simpson>, <James Bond>]