2011-06-20 60 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

相關問題