计算满足Django中谓词的行

时间:2011-06-20 19:30:18

标签: sql django

在Django中,我有一个视图,我希望按非主键字段进行分组,然后为每个组计算满足谓词的行数。我试过的代码是

funding_requests=FRNs.objects.filter(spin=spin).extra(
    select={"approved": "committed_amount > 0",
            "denied": "committed_amount=0"}
).values("funding_year").annotate(
    requested=Sum('orig_commitment_request'), approved=Sum('committed_amount'),
    disbursed=Sum('total_authorized_disbursement'), num_requests=Count("funding_year"),
    num_approved=Sum('approved'), num_denied=Sum('denied')
)

但是我收到错误消息“无法解析关键字'被拒绝'到字段中。”我也试过

funding_requests=FRNs.objects.filter(spin=spin).values("funding_year").annotate(
    requested=Sum('orig_commitment_request'), approved=Sum('committed_amount'),
    disbursed=Sum('total_authorized_disbursement'), num_requests=Count("funding_year")
).extra(
    select={"num_approved": "sum(committed_amount > 0)",
            "num_denied": "sum(committed_amount=0)"}
)

我没有收到错误,但num_approvednum_denied在页面上显示为空白。有没有人知道如何获得满足每个分组的给定谓词的行数。

2 个答案:

答案 0 :(得分:1)

这是关于django提供的新聚合类的更烦人的事情之一。您不能在注释中使用添加额外的字段(分组除外)。不幸的是,没有一个好的答案。

我能提供的唯一答案就是使用原始查询并在python中加入结果

答案 1 :(得分:0)

values之前,您可能不应该annotate限制select语句的输出。

您是否尝试删除.values("funding_year"),并在必要时将其包含在内?