Django ORM如何计算每行列值乘对应汇率后整列的总和
正确实现方案
你原来的写法错误原因是先对全量字段求和再乘汇率,但不同用户所属国家的汇率不同,需要先对单条用户记录的收入、支出乘以对应汇率,再做汇总求和。
实现步骤
- 先导入Django ORM所需的工具类:
from django.db.models import Sum, F
- 执行聚合查询:
result = User.objects.filter(group=1).aggregate( total_income=Sum(F('income') * F('country__currency__value')), total_expenditure=Sum(F('expenditure') * F('country__currency__value')) )
结果获取
查询返回的result是字典类型,可直接读取汇总结果:
# 输出示例 print(f"income: {result['total_income']}") print(f"expenditure: {result['total_expenditure']}")
逻辑说明
- 用
F('country__currency__value')跨外键关联拿到对应用户所属国家的货币汇率 - 单条记录先完成本币转美元的乘法计算,再通过
Sum做全局汇总,完全匹配你给出的计算逻辑,用示例数据测试可得到income:18、expenditure:37的预期结果。
内容的提问来源于stack exchange,提问作者Monty Swanson
相关产品推荐
相关产品推荐

