Odoo 17修改字段类型后创建记录报AttributeError错误的解决方法
Odoo 17 创建记录报错:AttributeError: '_unknown' object has no attribute 'id' 解决办法
检查字段类型修改的兼容性与数据迁移
修改字段类型时需确保新旧类型兼容:- 若将关联字段(如
Many2one)改为普通字段(如Char),需转换数据库中旧字段存储的ID值为对应字符串格式; - 若将普通字段改为关联字段,需保证现有数据值对应关联模型的有效记录ID,否则创建新记录时Odoo无法找到对应记录,会返回
_unknown对象。
- 若将关联字段(如
验证字段定义的正确性
修改字段类型后必须补充对应类型的必要参数:
错误示例:# 修改为Many2one但未指定关联模型 field_name = fields.Many2one()正确示例:
field_name = fields.Many2one(comodel_name='res.partner', string='Partner')缺少必要参数会导致Odoo无法识别字段关联的模型,进而生成
_unknown对象。同步视图层配置
字段类型修改后需同步更新对应视图(如form视图)的组件配置:- 若字段从
Many2one改为Char,需移除视图中该字段的widget="many2one"配置; - 若从普通字段改为关联字段,需确保视图中使用对应类型的widget。
完成修改后进入开发者模式,点击更新模块并刷新页面清除视图缓存。
- 若字段从
确保数据库结构与ORM定义一致
修改字段定义后需运行模块升级命令同步数据库结构:./odoo-bin -d 你的数据库名 -u 你的模块名若未升级模块,数据库中字段类型仍为旧类型,ORM读写时会出现不匹配,触发错误。
排查自定义业务逻辑
检查所有使用该字段的自定义create/write方法或计算字段逻辑:
比如原代码中存在record.field_name.id的调用,若字段改为Char类型,record.field_name为字符串,无id属性,需修改为适配新类型的逻辑。
内容的提问来源于stack exchange,提问作者Priyanshu Yadav
相关产品推荐
相关产品推荐

