簡體   English   中英

Django:TruncYear和注釋/聚合?

[英]Django: TruncYear and annotate/aggregate?

我有以下模型:

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

知道我在這里俯瞰什么嗎?

我敢打賭,您在Order模型上指定了默認排序,這會導致您看到的行為。 進行查詢時,您需要清除默認順序:

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

注意order_by()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM