获得给定年份范围内的年度计数

时间:2017-07-27 06:29:24

标签: python django django-queryset

我想跟踪每年给定年份内出生的动物数量。所以我或许可以确定哪一年出生的动物最多。我将这些数据用于图形报告。

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
]

它没有添加总数,也没有按年份分组。

1 个答案:

答案 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()

也不需要第二个值。