You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django使用aggregate聚合时如何获取QuerySet而非字典结果

实现方法

Django ORM的aggregate()方法设计为直接返回全表聚合计算后的字典结果,不会生成QuerySet实例。如果需要获取携带聚合结果的QuerySet,使用annotate()方法替代即可,针对全局统计场景,可通过固定值分组实现全表范围聚合,不会拆分多余分组,代码如下:

from django.db.models import Sum, Count, Value

invoices_queryset = Invoice.objects.annotate(
    group_flag=Value(1)
).values('group_flag').annotate(
    total_amount=Sum('order__order_items__amount'),
    number_of_invoices=Count('pk', distinct=True)
)

使用说明

  • 该QuerySet执行后仅包含1条数据,携带的total_amount、number_of_invoices字段值和你之前用aggregate()得到的结果完全一致
  • 完整保留QuerySet特性,支持后续链式调用filter()、切片、排序等所有QuerySet内置方法,不会像aggregate()一样直接触发SQL求值返回固定字典
  • 需要获取具体统计字典时,直接取第一个元素即可:stats = invoices_queryset[0]

内容的提问来源于stack exchange,提问作者I'mSRJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:36:17