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

如何在Django模型中按用户分组对amount字段变量求和

Django ORM按外键分组求和实现方法

aggregate方法仅用于返回全局聚合结果,要实现按用户分组统计金额总和,需要使用values() + annotate()的分组聚合组合方案。


具体实现步骤

  1. 首先导入聚合函数Sum
from django.db.models import Sum
  1. 执行分组聚合查询
# 按用户分组,统计每个用户的amount总和
grouped_data = Test.objects.values('name__username').annotate(total=Sum('amount'))

这里values('name__username')指定按用户名字段分组,因为name是关联到auth.User的外键,所以通过双下划线__跨表取用户名字段。

  1. 转换为目标元组格式
testlist = tuple((item['name__username'], item['total']) for item in grouped_data)

执行后得到的结果就是你需要的(("John", 30), ("Eric", 70))格式。


补充注意点

  • 你的原始模型定义存在笔误:models.models.ForeignKey多写了一层models,正确写法为models.ForeignKey('auth.User'),注意Django内置User模型首字母大写。
  • 示例中创建模型实例的写法仅作数据示意,实际开发中外键字段需要传入User实例而非用户名字符串,正确写法参考:
john = User.objects.get(username="John")
test1 = Test(name=john, amount=10)
  • 若你的模型Meta中配置了默认排序字段,建议在查询末尾添加.order_by()清空排序规则,避免排序字段干扰分组逻辑。

内容的提问来源于stack exchange,提问作者Sander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:18:00