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

FastAPI集成Tortoise-ORM出现Score类无date属性AttributeError报错求解

问题根因

你错误地将数据库原生映射字段标记为了Pydantic计算属性:
在Score模型的PydanticMeta内部类中,你把date加入了computed列表。computed配置的作用是告诉Tortoise-ORM的Pydantic生成器:对应字段是你在模型类中手动实现的计算方法/动态属性,不是ORM映射的数据库字段,生成Pydantic模型时需要从模型类中获取对应方法来取值。
而你的date本身就是通过fields.DateField()定义的标准数据库字段,没有在类中实现同名方法,生成Pydantic模型时调用getattr(Score, 'date')找不到对应属性,就抛出了这个报错。

解决方案

删掉Score模型PydanticMeta中的computed = ['date']配置即可,标准数据库字段不需要加入computed列表。
如果你想把你实现的today_date方法作为计算属性暴露给Pydantic,才需要把today_date加入computed列表。

其他附带问题修复

你代码中还有几处错误需要同步调整,否则后续运行还会抛出异常:

  • Team模型的PydanticMeta里同样错误地将数据库字段total_score加入了computed列表,如果total_score是需要存储的字段,直接删掉这条computed配置即可;如果你想让总分自动根据历史得分计算不需要存储,就删掉total_score: int = fields.IntField()这行字段定义,然后新增def total_score(self)方法来实现计算逻辑,再保留computed = ['total_score']配置。
  • 你在Team模型中调用了Sum函数但没有导入,需要新增导入语句from tortoise.functions import Sum。
  • 新建Team的逻辑存在问题:Team.create(**team.dict(), **score.dict())会把Score的score、date字段直接传入Team创建逻辑,而Team模型没有这两个字段,会报错。正确写法是先创建Team实例,再创建Score实例,然后把Score加入Team的score_history多对多关联中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:39:00