使用异物订购字段(如果存在)

时间:2018-12-12 16:19:25

标签: python django

我正在尝试查询一个异物(如果有的话)或本地字段。

示例:

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来使用注释和聚合,但这是行不通的。

有解决方案吗?

1 个答案:

答案 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')