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

Django中如何使用Aggregate Sum按name字段对同名称对象求和

实现按name字段分组求和的方案

直接用Django ORM的values() + annotate()组合即可实现需求,无需单独循环每个对象聚合,具体实现如下:


前置依赖导入

from django.db.models import Sum

核心分组求和代码

如果你操作的是Cart模型的QuerySet,直接使用以下语句:

# 指定按name字段分组,对同组内的amount字段求和
grouped_result = Cart.objects.values("name").annotate(amount=Sum("amount")).order_by()

如果你的数据源是UserProduct表,调整对应模型名即可:

grouped_result = UserProduct.objects.values("name").annotate(amount=Sum("amount")).order_by()

代码逻辑说明

  • values("name") 作用是指定分组依据,所有name字段值相同的记录会被归为同一组
  • annotate(amount=Sum("amount")) 作用是对每个分组的amount字段做求和运算,结果赋值给amount键
  • 末尾的空order_by()用于清除模型默认的排序规则,避免非分组字段的排序逻辑干扰分组结果

转换为Cart_object实例

如果你需要得到标准Cart_object实例而非字典格式,遍历结果构造即可:

cart_objects = [Cart(name=item["name"], amount=item["amount"]) for item in grouped_result]

最终cart_objects的输出格式和要求完全一致:

<QuerySet [<Cart_object: {name: 'Apple', amount: 10}>, <Cart_object: {name: 'Bananas', amount: 30}>]>

内容的提问来源于stack exchange,提问作者I.Z.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:02