为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2021-09-14 21:22:12
我正在尝试进行查询,如果有异物或本地字段,我将在其中订购异物。例子: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 使用注释和聚合,但它不起作用。有什么解决办法吗?
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

您可以尝试使用条件语句:


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


查看完整回答
反对 回复 2021-09-14
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信