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
的任何引用(参见我编辑的问题)。那么,这怎么可能仍然是一个问题呢?