0
假設我有一個3個條件的列表:conditionA
,conditionB
,conditionC
。dJango按條件列表排列
我希望能夠理清我的查詢集,以便將項目匹配conditionA
& conditionB
& conditionC
首先出現,然後conditionA
& conditionB
,然後conditionA
& conditionC
等有沒有辦法做到這一點?
假設我有一個3個條件的列表:conditionA
,conditionB
,conditionC
。dJango按條件列表排列
我希望能夠理清我的查詢集,以便將項目匹配conditionA
& conditionB
& conditionC
首先出現,然後conditionA
& conditionB
,然後conditionA
& conditionC
等有沒有辦法做到這一點?
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"
,conditionC是你想要所有其他人。你可以這樣說:
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>]
謝謝你,如果我的條件是像'名稱='john''它的工作? –
您可能會想要爲此使用過濾器。您可以按字母順序排列名稱。 – denvaar
我需要它是一個列表排序,以便具有'name = john'的對象將首先出現,然後剩下的是:\ –