我想跟踪每年给定年份内出生的动物数量。所以我或许可以确定哪一年出生的动物最多。我将这些数据用于图形报告。
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
]
它没有添加总数,也没有按年份分组。
答案 0 :(得分:2)
可能你在动物模型的Meta类中有订购字段,因此附加字段添加到分组依据并生成错误的结果。您可以尝试删除排序,您可以在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()
也不需要第二个值。