Odoo自定义插件版本管理及migration迁移钩子不生效问题咨询
Odoo 自定义模块迁移钩子生效及版本管控方案
基础配置校验
- 模块根目录下的
migrations目录必须与__manifest__.py、models等目录同级,不可嵌套在其他路径下 - 版本号子目录命名需完全遵循语义化版本规则,且与升级后的目标版本完全匹配,例如目标升级版本为1.1.0,则创建
migrations/1.1.0目录 - 钩子文件名必须严格为
pre-migrate.py、post-migrate.py,不可使用自定义命名(如你之前编写的pre-hook.py不符合规则)。两个文件都需要暴露migrate(cr, version)函数,入参分别为数据库游标、当前升级的版本号
版本管控核心规则
Odoo 迁移钩子的触发逻辑基于数据库已安装版本与__manifest__.py声明版本的对比结果:
- 仅当
__manifest__.py中的版本号高于数据库中ir_module_module表对应模块记录的latest_version值时,才会触发对应版本目录下的迁移钩子 - 测试时可先安装低版本模块(如版本号设为1.0.0,无迁移钩子),确认数据库中版本记录正确后,再修改
__manifest__.py版本号为更高版本(如1.1.0),重启服务升级模块即可触发钩子 - 版本号大小按段拆分数值对比,例如
1.10.0 > 1.2.0,不要在版本号中添加字母等非数字后缀,避免比较逻辑异常
触发操作注意事项
- 修改迁移钩子代码或模块版本号后,必须先重启Odoo服务,再进入应用列表升级对应模块,仅刷新页面无法生效
- 多次测试时如果需要重复触发同一版本的钩子,需要先将数据库中对应模块的
latest_version字段修改为更低的版本号,相同版本号不会重复触发迁移 - 钩子执行过程中抛出异常会导致模块升级中断,相关错误信息会输出到Odoo运行日志,可通过日志排查执行问题
内容的提问来源于stack exchange,提问作者gongarek
相关产品推荐
相关产品推荐

