我正在尝试进行查询,如果有异物或本地字段,我将在其中订购异物。例子: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')
添加回答
举报
0/150
提交
取消