2017-09-26 4 views
2

DemoModelというモデルがあります。Djangoの条件に基づいてorderbyを使用するには?

DemoModel.objects.all() 

すべてのオブジェクトを取得していますが、条件に基づいてorder_byを実行したい、私のモデルでは、と呼ばれるフィールドがあります。

このフィールド値が「Testing」の場合、その条件を使用して注文する必要があります。

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

このようなものはありますか?または、カスタマイズされたorder_byを作成する必要がありますか?

+0

? –

+0

はい絶対に... –

答えて

0

あなたは注釈でこれを達成することができます:あなたは任意の行を=「テスト」をdemo_fieldしている場合、あなたは右のクエリセットの順序を必要とするわけ

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 
関連する問題