2016-10-13 5 views
0

この表のユーザーIDのカウントは、approval_transaction_typeとapproval_typeの列に基づいて取得します。Django:2列で特定の列の数を取得する方法

enter image description here

本の期待される結果は次のようになります。

承認トランザクションタイプID(60)

  • 承認タイプID(65)= 2ユーザー
  • 承認タイプID(64)= 2ユーザー
  • 承認タイプID(63)= 2人のユーザー
  • 承認タイプID(62)= 2ユーザー
  • 承認タイプID(61)= 2ユーザー

達成するために私の現在のコードは、これはですが、それはサブリストを上書きして(最後の配列は、すべての配列を上書きしますなぜ私は理解していない)間違った結果を返します。

for transaction in transaction_types: 

     # Initial Array 
     transaction["approval_types"] = [] 

     for approval_type in approval_types: 

      # Get Count of Users 
      approval_type["count"] = Model.objects.filter(approval_transaction_type=transaction['id'],approval_type=approval_type['id']).values().count() 

      # Assign this sub list to main list 
      transaction["approval_types"].append(approval_type) 

どのように私は何をルーピングせずにカウントを取得し、クエリーセットを使用しますか? これについて何かが分からない場合は教えてください。ありがとう!

+0

Django> 1.8には条件付き集計があります。 https://docs.djangoproject.com/en/1.10/ref/models/conditional-expressions/を参照し、ケース機能を使用できます。 – wrdeman

+0

[Django相当数の重複する可能性があります](http://stackoverflow.com/questions/327807/django-equivalent-for-count-and-group-by) –

答えて

2

これは1つのクエリで実行できます。これに基づいてDjango equivalent for count and group by

Model.objects.values('approval_type').annotate(Count('user')) 
+0

ありがとう!本当に必要なもの – Binsoi

関連する問題