2011-06-20 5 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') 
) 

ですが、私は、エラーメッセージが表示されます私はまた、

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が提供する新しい集約クラスに関するより厄介なことの1つです。注釈で余分に追加されたフィールドは使用できません(グループ化を除く)。残念ながら良い答えはありません。

かなり多く、私は生のクエリを使用してのpythonでの結果に参加するだろう提供できる唯一の答え

0

valuesの出力をannotateの前に制限しないでください。

.values("funding_year")を削除して、必要に応じて最後に含めましたか?

+0

合計がHTTPSでの例のように、年ごとにカウントされますように、私はそこにその文を持っていました: //docs.djangoproject.com/ja/1.3/topics/db/aggregation/#values – murgatroid99

関連する問題