Odoo迁移管理器修改字段值失败:预迁移脚本未触发求助
Odoo预迁移脚本未触发的排查与解决
针对你遇到的pre-migration.py脚本未执行问题,按以下步骤排查:
1. 修正装饰器类型
pre-migration脚本必须使用@openupgrade.pre_migrate()装饰器,你当前用的@openupgrade.migrate()是主迁移脚本(migration.py)的专用装饰器。修改后的代码如下:
import logging from odoo import SUPERUSER_ID, api from openupgradelib import openupgrade logger = logging.getLogger(__name__) @openupgrade.pre_migrate() def pre_migrate(cr, version): env = api.Environment(cr, SUPERUSER_ID, {}) logger.info("-----Renaming Project Templates-----") if planning_project := env["project.project"].search( [("name", "=", "Planning")], limit=1 ): planning_project.write({"name": "Location Qualification"}) logger.info("----completed------")
2. 验证版本号匹配
- 检查模块
__manifest__.py中的version字段,确保当前模块版本低于迁移文件夹的版本号15.0.1.0.0。Odoo仅在模块从低版本升级到对应迁移文件夹版本时触发脚本。 - 例如:如果当前模块版本是
15.0.0.0.0,升级到15.0.1.0.0时会执行该pre-migration脚本;如果已经是15.0.1.0.0,则不会触发,需先将版本改低再重新升级。
3. 确认更新方式
- 必须通过升级模块操作触发迁移:在Odoo应用列表找到目标模块,点击「Upgrade」按钮,而非仅刷新或重新安装(新安装模块不会执行pre-migration脚本)。
4. 排查日志与逻辑有效性
- 查看Odoo日志文件(如
odoo.log),搜索你定义的日志内容,确认脚本是否真的未执行:- 若日志未出现:说明脚本未触发,回到前3步排查;
- 若日志出现但无效果:检查
project.project的搜索条件,比如名称是否有大小写差异、空格或特殊字符,或者目标记录是否存在。
内容的提问来源于stack exchange,提问作者A.Sasori
相关产品推荐
相关产品推荐

