2017-07-27 76 views
1

我想跟蹤每年在給定範圍內出生的動物數量。所以我可以確定哪一年出生的動物最多。我正在將這些數據用於圖形報告。在給定的年份範圍內獲得年度計數

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

現在給定的年份將是2015年到2017年。我想了解那些年內出生的動物概要。

E.g.

[ 
    {'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

也許你已經訂購場,所以附加字段添加到組通過併產生錯誤的結果。你可以嘗試刪除排序,你可以在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

試用產品,在動物模型元類同比更換ID

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感謝您的快速響應,但我得到了'無法解析關鍵字'年'到字段中' –

相關問題