2017-07-27 2 views
1

Ich möchte die Anzahl der Tiere innerhalb der angegebenen Jahreszahl jährlich zu verfolgen. So kann ich feststellen, in welchem ​​Jahr die meisten Tiere geboren wurden. Ich verwende diese Daten für grafische Berichte.Erhalten Sie die jährliche Anzahl innerhalb der angegebenen Jahre

class Animal(models.Model): 
    # omitted fields.. 
    date_of_birth = models.DateField() 

Nun würden die gegebenen Jahre 2015 bis 2017. Ich möchte die Zusammenfassung von Tier innerhalb dieser Jahre geboren bekommen.

z.

[ 
    {'year': 2015, total: 10}, 
    {'year': 2016, total: 15} 
    {'year': 2017, total: 4} 
] 

Bisher hier ist das, was ich tat:

Animal.objects.filter(
    date_of_birth__year__range = (
     '2017', '2018' 
    ) 
).extra(
    select={'year': 'YEAR(date_of_birth)'} 
).values('year').annotate(total=Count('id')).values('year', 'total') 

bekam aber diese:

[ 
    { 
     "total": 1, 
     "year": 2015 
    }, 
    { 
     "total": 1, 
     "year": 2015 
    }, 
    { 
     "total": 1, 
     "year": 2015 
    }, 
    { 
     "total": 1, 
     "year": 2015 
    }, 
    ... and so on to 2017 
] 

Es ist nicht die Gesamt hinzugefügt haben und es nicht nach Jahren gruppiert.

Antwort

2

Wahrscheinlich Feld Sie die Bestellung in Meta-Klasse für Tiermodell hinzugefügt, so zusätzliches Feld zur Gruppe durch und falsches Ergebnis erzeugen. Sie können versuchen, Ordnung zu entfernen, werden Sie darüber in docs lesen:

Animal.objects.filter(
    date_of_birth__year__range = (
     '2017', '2018' 
    ) 
).extra(
    select={'year': 'YEAR(date_of_birth)'} 
).values('year').annotate(total=Count('id')).order_by() 

Auch der zweite Wert nicht benötigt.

+0

Wow im erstaunen Mann Danke für Ihre Antwort bietet es die richtige Lösung –

0

Probieren Sie es aus, ersetzen id auf Jahr

Animal.objects.filter(
    date_of_birth__year__range = (
     '2017', '2018' 
    ) 
).extra(
    select={'year': 'YEAR(date_of_birth)'} 
).values('year').annotate(total=Count('year')).values('year', 'total') 
+0

H danke für Ihre schnelle Antwort, aber ich habe 'Kann nicht Schlüsselwort 'Jahr' in Feld lösen ' –

Verwandte Themen