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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:17:36