Django:TruncYear和annotate / aggregate?

时间:2018-04-26 11:02:49

标签: python django

我有以下型号:

class Order(models.Model):
    placed_at = models.DateTimeField()
    amount = models.DecimalField()

我想知道每年amount的总数。运行时:

Order.objects.annotate(year=TruncYear('placed_at'))
             .values('year')
             .annotate(total=Sum('amount'))

Django返回一个查询集,其中包含数据库中每条记录的年份和总数(所以total == amount)。使用聚合时:

Order.objects.annotate(year=TruncYear('placed_at'))
             .values('year')
             .aggregate(total=Sum('amount'))

Django返回总计({'total': Decimal('72822.41')})。我要找的结果应该是每年的总分解。像

<QuerySet [{'year': 2016, 'total': Decimal('20000.00')},
           {'year': 2017, 'total': Decimal('30000.00')}]

知道我在这里俯瞰什么吗?

1 个答案:

答案 0 :(得分:0)

我打赌您在Order模型上指定了默认排序,would cause您所看到的行为。{3}}您在进行查询时需要清除默认顺序:

Order.objects.annotate(year=TruncYear('placed_at'))
         .values('year')
         .annotate(total=Sum('amount')).order_by()

请注意order_by()