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

Django聚合操作中强制Avg函数返回整数而非Decimal类型的方案咨询

解决方案

你可以直接在ORM聚合查询阶段完成取整+类型转换操作,无需后续单独修改字典值,步骤如下:

1. 导入所需ORM函数

from django.db.models import Count, Min, Max, Avg, Coalesce, Round, IntegerField

2. 修改聚合查询逻辑

在price_avg的计算逻辑中嵌套Round+Cast操作,直接在数据库层面完成取整和整数类型转换:

stats = Ad.objects.aggregate(
    ads_total=Count('pk'),
    price_min=Coalesce(Min('price'), Val(0)),
    price_avg=Coalesce(Cast(Round(Avg('price')), output_field=IntegerField()), Val(0)),
    price_max=Coalesce(Max('price'), Val(0)),
)

原理说明

你之前单独用Round()返回X.0格式的原因是Round默认返回浮点/Decimal类型,外层套一层Cast指定输出为整数字段后,数据库查询结果会直接返回纯整数,不需要再用Python代码单独处理stats字典。

备选方案(DRF场景)

如果你是通过Django REST Framework返回接口数据,也可以直接在对应序列化器中将price_avg字段声明为IntegerField,序列化阶段会自动完成取整+类型转换,不需要修改查询逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:06:04