Django中int与Time模型对象相加报TypeError如何解决
实现方法
无需修改模型类,在自定义函数内调整逻辑即可完成分钟数求和,以下是两种可用方案:
方案1:修正循环逻辑
原有代码错误点在于循环时直接累加Time模型实例,而非实例中存储数值的value字段,修正代码如下:
def sum(request): times = ..._set.all() total_min = 0 # 初始化总和为整型0 for time_obj in times: # 字段允许为空,空值按0计算避免类型报错 current_min = time_obj.value if time_obj.value is not None else 0 total_min += current_min
方案2:ORM聚合查询(推荐,性能更好)
如果不需要遍历单条记录做额外处理,直接通过数据库聚合完成求和,避免Python层循环的性能损耗,代码如下:
from django.db.models import Sum, Coalesce def sum(request): # 聚合直接计算总和,Coalesce处理无有效记录时返回None的情况,统一返回整型0 total_min = ..._set.aggregate(total=Coalesce(Sum('value'), 0))['total']
注意:两种方案都兼容
value字段null=True的设定,不会出现空值导致的运算错误。
内容的提问来源于stack exchange,提问作者Sergo
相关产品推荐
相关产品推荐

