2017-07-27 16 views
1

年の範囲内で生まれた動物の数を追跡したいと思います。だから私はどの年に最も多くの動物が生まれたのかを知ることができます。私はこのデータをグラフィックレポートに使用しています。与えられた年の範囲内で年間カウントを取得

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

今、与えられた年は、私がその年以内に生まれた動物の要約を取得したいと思い2017年に2015年になります。

など。これまでのところ、ここで

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

は私がやったことです:

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') 

しかし、これだ:それは、合計を追加しませんでした

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

を、それは年によってグループ化されていませんでした。

答えて

2

をIDを置き換え、それを試して、その追加フィールドは、グループに追加され、間違った結果を生成します。あなたはdocsでこれを読むことができ、順序を削除しようとすることができます:

また
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() 

秒の値は必要ありません。

+0

うわー、驚いています。 –

0

おそらくあなたは動物モデルのメタクラスのフィールドを注文している年に

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

お返事ありがとうございますが、私は '' year 'フィールドにキーワードを解決できません。 –

関連する問題