Django 带计数的注释产生带NullBooleanField的不正确值
我正在执行以下带有一些注释的查询:Django 带计数的注释产生带NullBooleanField的不正确值,django,django-queryset,django-annotate,Django,Django Queryset,Django Annotate,我正在执行以下带有一些注释的查询: (AwardIssueProcess.objects.filter(grant__client=client, completed=completed_status) .annotate(total_awarded=Sum('award__awardissuedactivity__units_awarded'), num_accepted=Count(Case(When(award__accepted
(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_unaccept
会产生不正确的值。首先,如果我有奖,这个数字有时是我期望的两倍。但如果我移除
total_awarded=Sum('award__awardissuedactivity__units_awarded')
从注释开始,加倍问题就消失了
其次,如果没有奖励,num_unaccept
的值为1。但当有奖励时,价值是正确的(但并非所有案例都是由于我前面提到的加倍问题)。在第二个问题中,我怀疑这可能是因为它评估的奖励是None
,但我真正想让它检查接受的字段是否是None
。如果这个奖不存在,就别算了。accepted
字段是一个NullBooleanField
在num_unaccepted
的情况下,我应该如何以不同的方式编写这篇文章来解决这两个问题
编辑
我从注释中删除了total\u designed=Sum('award\u awardissuedactivity\u units\u designed')
,并创建了一个单独的函数来获取我需要的total\u designed
金额。这解决了我的第一个问题,但第二个问题仍然存在。这是预期的行为:如果对两个独立的表进行连接,则将行“相乘”。因此,如果有两个awardissuedactivity
元素,那么每一个award
行将加倍。我知道了,谢谢!然而,当没有奖励时,num_unecepted
为1仍然是一个问题。在这种情况下,AwardIssueProcess
项目可能没有或只有一个awardissuedactivity
。我更新并删除了注释中对awardissuedactivity
的任何引用(参见我编辑的问题)。那么,这怎么可能仍然是一个问题呢?