我正在尝试查询一个异物(如果有的话)或本地字段。
示例:
class AuditorData(Base):
auditor_weight = models.FloatField()
audited_object = models.ForeignKey('MyObject', related_name='audits')
class MyObject(Base):
weight = models.FloatField()
基本上我想按Max(audits.auditor_weight)排序,但是如果没有审核,它将按“ weight”排序
我该如何创建查询
我试图通过注解order_by来使用注释和聚合,但这是行不通的。
有解决方案吗?
答案 0 :(得分:1)
您可以使用conditional statement这样尝试:
from django.db.models import Count, Max, Case, When, FloatField, F
MyObject.objects.all().annotate(count=Count('audits')).annotate(
max=Case(
When(count=0, then=F('weight')),
When(count__gt=0, then=Max('audits__auditor_weight')),
output_field=FloatField()
)
)
).order_by('max')