2011-06-20 34 views
2

在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') 
) 

但我得到错误消息“Can not resolve keyword'denied'into field。”我也试过

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显示在页面上为空白。有谁知道如何获得满足给定谓词的每个分组的行数。

回答

1

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

几乎是唯一的答案,我可以提供将使用原始查询,并加入蟒蛇结果

0

您应该不会在annotate之前限制values的select语句输出。

您是否尝试过删除.values("funding_year")并在最后包括它,如果需要?

+0

我有这种说法,这样的数额将每年的例子是https计算,如: //docs.djangoproject.com/en/1.3/topics/db/aggregation/#values – murgatroid99

相关问题