2016-04-24 54 views
0


我有一個帶有選項的CharField模型。我想彙總模型並獲得所有選項的列表以及每個選項中的模型數量。所以,如果我有:django - 根據模型中的字段彙總數據

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

我想建立一個Django查詢(如果我可以在JSON)設置爲得到以下結果

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

這甚至與Django的ORM可能還是我需要運行一個純粹的sql查詢?
謝謝。

+1

很可能,它被稱爲[凝聚註釋](HTTPS:/ /docs.djangoproject.com/en/1.9/topics/db/aggregation/#aggregating-annotations) – 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

謝謝!事實上,這是做伎倆:) –