假设我列出了3个条件:conditionA
,conditionB
,conditionC
。
我希望能够对查询集进行排序,以便匹配conditionA
&的项目conditionB
&首先显示conditionC
,然后conditionA
& conditionB
,然后是conditionA
& conditionC
等。有办法做到这一点吗?
答案 0 :(得分:0)
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>]