2017-09-09 3 views
0

Entschuldigung für den unklaren Titel ... Ich weiß nicht, wie ich es richtig machen soll. Grundsätzlich habe ich das folgende Modell:Anzahl der Zeilen und Summe aus dem gleichen Modell zurückgeben

class Items(models.Model): 
     total=models.IntegerField() 

Beispieldaten jetzt ist einfach:

 1   10 
    2   15 
    3   90 
    6   10 
    9   20 

Ich habe insgesamt 5 Elemente mit insgesamt 145 habe ich versucht, die folgenden aber es versäumt cos es Gruppierung die ID-Säule, die mir ein Wörterbuch in der folgenden strucutre zurück:

{"total_items":1,"items_worth":10, "total_items":2,"items_worth":15} 

wo wie das, was ich will, ist:

 {"total_items":5, "total_worth":145} 

in SQL, es war in Ordnung:

SELECT COUNT(id) as total_items,SUM(total) as total_worth 

Während DJANGO fügt hinzu:

SELECT COUNT(id) as total_items,SUM(total) as total_worth FROM model GROUP BY id 

Dies ist meine aktuelle Django Abfrage:

data=Items.Objects.all().annotate(total_items=Count('id'),total_worth=Sum('total')).values('total_items','total_worth') 

Antwort

1

Sie können Sum verwenden. Verwenden Sie einfach aggregation

from django.db.models import Count, Min, Sum, Avg 
data = Items.objects.aggregate(Sum('total'), Count('id')) 

Beispielausgabe

{'total__sum': 145, 'id__count': 5} 
Verwandte Themen