我正在执行以下带有一些注释的查询:
(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_不可接受
如果没有奖励,则值为1。但当有奖励时,价值是正确的(但并非所有案例都是由于我前面提到的加倍问题)。在第二期中,我怀疑这可能是因为它正在评估该奖项
None
,但我真正想要的是让它检查
accepted
菲尔德是
没有一个
.如果这个奖不存在,那就别算了。这个
认可的
字段是一个
NullBooleanField
.
我应该如何用不同的方式来解决这两个问题
num_不可接受
?
编辑
我搬走了
total_awarded=Sum('award__awardissuedactivity__units_awarded')
并创建了一个单独的函数来获取
total_awarded
我需要的数量。这解决了我的第一个问题,但第二个问题仍然存在。