2016-11-16 64 views
0

假設我有一個3個條件的列表:conditionA,conditionB,conditionCdJango按條件列表排列

我希望能夠理清我的查詢集,以便將項目匹配conditionA & conditionB & conditionC首先出現,然後conditionA & conditionB,然後conditionA & conditionC等有沒有辦法做到這一點?

回答

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" ,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>]

+0

謝謝你,如果我的條件是像'名稱='john''它的工作? –

+0

您可能會想要爲此使用過濾器。您可以按字母順序排列名稱。 – denvaar

+0

我需要它是一個列表排序,以便具有'name = john'的對象將首先出現,然後剩下的是:\ –