2017-09-26 44 views
2

我有一個模型叫DemoModel我正在查詢它,即;如何使用基於Django中的條件的orderby?

DemoModel.objects.all() 

我正在提取所有的對象,但我想要做的order_by基於條件,即;在我的模型中有一個字段叫做demo_field,

如果該字段值是'測試',那麼它應該使用該條件進行排序。

DemoModel.objects.all().order_by(demo_field='Testing') 

有沒有這樣的事情?或者我們必須創建自定義的order_by?

+0

你的意思是,如果任何行已demo_field = 「測試」,那麼你需要一個queryset的正確順序? –

+0

絕對是...... –

回答

0

您可以註釋實現這一目標:

from django.db.models import Case, When, IntegerField 

result = DemoModel.objects.annotate(testing=Case(When(demo_field='Testing', then=1), default=0, output_field=IntegerField())).order_by('testing') 
0
result = DemoModel.objects.all() 
if result.filter(demo_field="Testing").exists(): 
    result = result.order_by(demo_field) 
return result