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

Django中__str__返回float类型引发模板报错的解决方法咨询

解决Django中__str__返回float导致的__str__ returned non-string (type float)错误

这个问题我之前处理过,核心原因非常清晰:Django强制要求模型的__str__方法必须返回字符串类型,但你直接返回了self.cost这个FloatField对应的float数值,这就触发了类型不匹配的报错。哪怕你在模板里用了floatformat过滤器,Django在处理模型对象的某些内部环节依然会调用__str__方法,所以必须先修复这个方法的返回值类型。

具体修复步骤

  1. 修改模型的__str__方法,将float转为字符串
    打开你的models.py,找到BudgetInfo模型的__str__方法,把返回值从直接的self.cost改成字符串格式:

    class BudgetInfo(models.Model):
        cost = models.FloatField()
        # 其他字段定义...
    
        def __str__(self):
            # 最简单的方式:直接将float转为字符串
            return str(self.cost)
            # 如果你想提前格式化数值(比如保留两位小数),也可以这么写:
            # return f"{self.cost:.2f}"
    

    这样修改后,__str__方法的返回值就符合Django的要求了,不会再触发类型错误。

  2. 验证模板渲染效果
    重启Django服务后,模板里的{{ budget|floatformat:"-2" }}依然可以正常工作——floatformat过滤器会自动识别数值(不管是从模型字段直接取,还是从__str__返回的字符串转换),并按照你指定的格式输出。

额外说明

如果你的模板里有直接渲染整个模型对象的场景(比如{{ budget }}),此时Django会调用__str__方法来显示内容,修改后的方法也能让这个场景正常显示格式化后的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:22:39