Order By with Foreign Object字段(如果存在)

2024-05-16 09:55:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行一个查询,如果存在外部对象,我将按外部对象排序,或者按本地字段排序。你知道吗

示例:

class AuditorData(Base):
    auditor_weight = models.FloatField()
    audited_object = models.ForeignKey('MyObject', related_name='audits')

class MyObject(Base):
    weight = models.FloatField()

基本上我想按马克斯的顺序做(审计.u权重)但如果没有审计,它将按“重量”排序

如何创建查询来执行此操作

我试着使用注释和聚合,以及coalesceorderby,但是没有用。你知道吗

有什么解决办法吗?你知道吗


Tags: 对象示例baseobject排序modelsauditorclass
1条回答
网友
1楼 · 发布于 2024-05-16 09:55:31

您可以使用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')

相关问题 更多 >