如何在Django中使用基于条件的orderby?

如何在Django中使用基于条件的orderby?,django,Django,我有一个名为DemoModel的模型,我正在查询它,即: DemoModel.objects.all() 我正在获取所有对象,但我想根据条件进行排序,即:;在我的模型中,有一个名为“演示”的字段 如果该字段值为“测试”,则应使用该条件对其进行排序 DemoModel.objects.all().order_by(demo_field='Testing') 有这样的吗?或者我们必须通过创建自定义订单?您可以通过注释来实现这一点: result = DemoModel.objects.all()

我有一个名为DemoModel的模型,我正在查询它,即:

DemoModel.objects.all()
我正在获取所有对象,但我想根据条件进行排序,即:;在我的模型中,有一个名为“演示”的字段

如果该字段值为“测试”,则应使用该条件对其进行排序

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

有这样的吗?或者我们必须通过创建自定义订单?

您可以通过注释来实现这一点:

result = DemoModel.objects.all()
if result.filter(demo_field="Testing").exists():
    result = result.order_by(demo_field)
return result
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')

你的意思是如果任何一行有demo_field=“Testing”,那么你需要订购该查询集,对吗?是的,绝对。。。