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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:57:25