You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Odoo自定义模块添加res.partner字段报错:列res_partner.my_field不存在

解决Odoo自定义模块res.partner新增字段线上报错问题

我来帮你排查这个线上线下不一致的问题,这种情况大多和模块升级不彻底、依赖加载顺序或者环境差异有关,咱们一步步来解决:

1. 优先确认线上模块的升级状态

  • 先别急着查代码,先确认线上环境有没有真正完成模块升级:登录线上Odoo后台,找到你的自定义模块,点击「升级」按钮,并且仔细看升级过程中的日志提示——有时候上传代码后没点升级,或者升级时出现了隐性错误(比如依赖模块没装),都会导致字段没被创建。
  • 可以直接去线上数据库里检查ir_model_fields表,搜索my_fieldres_partner相关的记录,如果没有这条记录,说明字段根本没被Odoo的ORM层创建出来。

2. 检查依赖模块的加载与状态

  • 虽然你已经在depends里加了contacts,但要确认线上环境的contacts模块是已安装且启用的状态,并且是在你的自定义模块之前加载的。Odoo会按照依赖顺序处理模块,如果contacts没先加载,可能会影响res.partner的继承逻辑。
  • 另外,res.partner的核心模块是base,但contacts会对它做扩展,确保线上的contacts模块没有被其他自定义模块冲突覆盖。

3. 手动修复字段(紧急方案)

如果模块升级始终没效果,可以尝试手动在数据库中添加字段,再同步Odoo的元数据:

  1. 连接线上数据库,执行SQL语句:
    ALTER TABLE res_partner ADD COLUMN my_field BOOLEAN DEFAULT FALSE;
    
  2. 回到Odoo后台,点击「更新模块列表」,然后再次升级你的自定义模块——这时候Odoo会识别到字段已存在,自动同步字段的元数据到ir_model_fields中。

4. 核对本地与线上的Odoo版本

有时候本地和线上的Odoo主版本(比如14.0、15.0)或者小版本不一致,会导致ORM的字段处理逻辑有差异。确认线上环境的Odoo版本和本地完全匹配,避免版本兼容问题。

5. 排查代码中的隐性语法错误

看你贴的代码里,badge_ids那行有个明显的语法问题:client_i应该是client_id,而且少了闭合的括号?正确的写法应该是:

badge_ids = fields.One2many('mymodule.badge', 'client_id')

这种语法错误可能在本地环境被忽略,但线上环境的Python解释器可能会导致模块加载失败,进而字段没被创建。先把代码里的语法问题修复后重新部署线上。

6. 查看线上完整日志找线索

如果以上步骤都没用,去线上环境的Odoo日志文件(通常在/var/log/odoo/目录,或者容器的日志输出里)找模块升级时的完整日志,看看有没有其他异常信息——比如权限问题、数据库锁表、或者其他模块的冲突,这些都可能导致字段创建失败。


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

火山引擎 最新活动