使用外来对象字段排序(如果存在)

我正在尝试进行查询,如果有异物或本地字段,我将在其中订购异物。


例子:


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) 排序,但如果没有审计,它将按“权重”排序


我怎么能创建一个查询来这样做


我尝试通过合并 order_by 使用注释和聚合,但它不起作用。


有什么解决办法吗?


偶然的你
浏览 158回答 1
1回答

慕仙森

您可以尝试使用条件语句:from django.db.models import Count, Max, Case, When, FloatField, FMyObject.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')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python