我正在使用一些注释执行以下查询:
(AwardIssueProcess.objects.filter(grant__client=client, completed=completed_status)
.annotate(total_awarded=Sum('award__awardissuedactivity__units_awarded'),
num_accepted=Count(Case(When(award__accepted=True, then=1))),
num_rejected=Count(Case(When(award__accepted=False, then=1))),
num_unaccepted=Count(Case(When(award__accepted=None, then=1)))))
但是,num_unaccepted
会产生不正确的值。首先,如果我有奖项,这个数字有时是我预期的两倍。但如果我删除
total_awarded=Sum('award__awardissuedactivity__units_awarded')
从注释中,然后双倍问题就消失了。
其次,如果没有奖励,num_unaccepted
的值为1。但是当有奖项时,价值是正确的(但不是所有情况都是由于我之前提到的加倍问题)。在第二期中,我怀疑这可能是因为它将奖励评估为None
,但我真正想要的是检查accepted
字段是否为None
。然后,如果奖项不存在,那就不要算了。 accepted
字段为NullBooleanField
。
我应该如何用不同的方式来解决这些问题num_unaccepted
?
修改
我从注释中删除了total_awarded=Sum('award__awardissuedactivity__units_awarded')
并创建了一个单独的函数来获取我需要的total_awarded
金额。这解决了我的第一个问题,但第二个问题仍然存在。