dJango按条件列表排序

时间:2016-11-16 16:20:57

标签: python django python-2.7 django-models django-views

假设我列出了3个条件:conditionAconditionBconditionC

我希望能够对查询集进行排序,以便匹配conditionA&的项目conditionB&首先显示conditionC,然后conditionA& conditionB,然后是conditionA& conditionC等。有办法做到这一点吗?

1 个答案:

答案 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>]