我必须从一个注释构建一个字段,该字段是一个分数,等于基于不同queryset表达式的其他两个注释的除法。
annotated_queryset = Influencer.objects.annotate(
score_sum=Sum('submission__answer__decisions__score'),
submission_count=Count('submission',
filter=Q(
submission__status__in=Submission.ANSWERED_STATUS
)
)
).annotate(rate=F('score_sum') / F('submission_count'))
这段代码演示了如何获取注释。
annotated_queryset.update(acceptation_rate=F('rate'))
但我得到了
FieldError: Aggregate functions are not allowed in this query
我唯一的解决方案是使用丑陋而昂贵的for循环:
for each in annotated_queryset:
each.acceptation_rate = each.rate
each.save()
-
为什么我不能使用annotate+update表单?
-
有比for循环更好的方法吗?会是什么?
annotated_queryset = Influencer.objects.annotate(
score_sum=Sum('submission__answer__score'),
submission_count=Count('submission',
filter=Q(
submission__status__in=Submission.ANSWERED_STATUS
)
)
).annotate(
rate=ExpressionWrapper(
F('score_sum') / F('submission_count'),
output_field=FloatField()
)
)[:1]
Influencer.objects.update(acceptation_rate=Subquery(annotated_queryset))