代码之家  ›  专栏  ›  技术社区  ›  Daniel Holmes

使用计数进行注释会产生使用NullBooleanField的错误值

  •  0
  • Daniel Holmes  · 技术社区  · 6 年前

    我正在执行以下带有一些注释的查询:

        (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 我需要的数量。这解决了我的第一个问题,但第二个问题仍然存在。

    0 回复  |  直到 6 年前
    推荐文章