2016-04-24 17 views
0


私には選択肢があるCharFieldのモデルがあります。私はモデルを集約し、すべての選択肢と各選択肢のモデル数のリストを取得したい。私が持っているのであれば:私は(私ができる場合はJSONで)次のような結果を得るために設定Djangoのクエリを構築したいdjango - モデルのフィールドに従ったデータを集計します

model1: a 
model2: b 
model3: c 
model4: a 
model5: c 
model6: c 

{a: 2, b: 1, c: 3} 

は、DjangoのORMとこのも可能ですかやるI純粋なSQLクエリを実行する必要がありますか?
ありがとうございます。

+1

ことが可能であり、それは(HTTPS [注釈を集約する]と呼ばれています:/ /docs.djangoproject.com/ja/1.9/topics/db/aggregation/#集約 - 注釈) – Selcuk

答えて

1

これはあなたが探しているdictを与えるはずです。 order of annotate and valuesで、しかし、注意してください:

from django.db.models import Count 

d = { 
    x['field_name']: x['count'] 
     for x in model.objects 
      .annotate(count=Count('field_name')) 
      .values('field_name', 'count') 
      .distinct() 
} 

あなたがjsonモジュールを使用してJSONにこれを変換したい場合:

import json 

json_string = json.dumps(d) 
+0

ありがとう!確かにそのトリックをした:) –

関連する問題