2016-04-24 14 views
0


Ich habe ein Modell mit einer CharField mit Auswahlmöglichkeiten. Ich möchte das Modell aggregieren und eine Liste aller Optionen und der Anzahl der Modelle in jeder Auswahl erhalten. Also, wenn ich habe:django - aggregierte Daten nach Feld in Modell

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

Ich möchte eine django Abfrage erstellen setzen das folgende Ergebnis zu erhalten (in json wenn ich kann)

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

Ist dies überhaupt möglich mit dem django ORM oder tun i müssen Sie eine reine SQL-Abfrage ausführen?
Danke.

+1

Es ist möglich, und es heißt [Aggregieren Anmerkungen] (https://docs.djangoproject.com/de/1.9/topics/db/aggregation/#aggregating-annotations) – Selcuk

Antwort

1

Dies sollte Ihnen die dict, die Sie suchen. Seien Sie vorsichtig, aber mit dem 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() 
} 

Wenn Sie dies json konvertieren möchten verwenden Sie das json Modul:

import json 

json_string = json.dumps(d) 
+0

Danke! In der Tat hat das den Trick gemacht :) –

Verwandte Themen