
关于
Odoo 自定义模块跨版本迁移分步指南(v14→v15→v16→v17)。涵盖 API 变更、废弃方法和视图迁移。
name: odoo-migration-helper description: "Odoo 自定义模块版本间迁移的分步指南(v14→v15→v16→v17)。涵盖 API 变更、弃用方法和视图迁移。" risk: safe source: "self"
Odoo 迁移助手
概述
在 Odoo 主要版本之间迁移模块需要仔细处理 API 变更、弃用方法、重命名字段和新视图语法。本技能系统地指导你完成迁移过程,涵盖版本之间最常见的破坏性变更。
何时使用本技能
- 将自定义模块从 Odoo 14/15/16 升级到更新版本。
- 获取运行
odoo-upgrade之前需要检查的清单。 - 修复版本升级后的弃用警告。
- 了解两个特定 Odoo 版本之间的变化。
工作原理
- 激活:提及
@odoo-migration-helper,指定源版本和目标版本,并粘贴你的模块代码。 - 分析:接收包含前后代码修复的破坏性变更列表。
- 验证:获取针对你模块功能的迁移检查清单。
按版本的关键迁移变更
Odoo 16 → 17
| 主题 | 旧(v16) | 新(v17) |
|---|---|---|
| 视图可见性 | attrs="{'invisible': [...]}" | invisible="condition" |
| 聊天器 | <div class="oe_chatter"> | <chatter/> |
| 必填/只读 | attrs="{'required': [...]}" | required="condition" |
| Python 最低版本 | 3.10 | 3.10+ |
| JS 模块 | 旧版 define(['web.core']) | ES 模块 import 语法 |
Odoo 15 → 16
| 主题 | 旧(v15) | 新(v16) |
|---|---|---|
| 网站发布标志 | website_published = True | is_published = True |
| 邮件别名 | 公司上的 alias_domain | 移至 mail.alias.domain 模型 |
| 报表渲染 | _render_qweb_pdf() | _render_qweb_pdf()(相同,但签名变更) |
| 会计凭证 | account.move.line 分组 | 行聚合规则更新 |
| 邮件线程 | mail_thread_id | 已弃用;使用 message_ids |
示例
示例 1:将 attrs 可见性迁移到 Odoo 17
<!-- v16 — 基于域的 attrs -->
<field name="discount" attrs="{'invisible': [('product_type', '!=', 'service')]}"/>
<field name="discount" attrs="{'required': [('state', '=', 'sale')]}"/>
<!-- v17 — 内联 Python 表达式 -->
<field name="discount" invisible="product_type != 'service'"/>
<field name="discount" required="state == 'sale'"/>
示例 2:迁移聊天器块
<!-- v16 -->
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
<!-- v17 -->
<chatter/>
示例 3:迁移 website_published 标志(v15 → v16)
# v15
record.website_published = True
# v16+
record.is_published = True
最佳实践
- ✅ 要做: 在推送到生产环境之前,在每个版本上使用
--update=your_module测试。 - ✅ 要做: 使用官方 Odoo 升级指南作为参考。
- ✅ 要做: 一次迁移一个版本(不要跳版本)。
- ❌ 不要: 在没有测试的情况下直接在生产环境升级。
- ❌ 不要: 忽略弃用警告——它们通常在下一个版本变成错误。
兼容工具
Claude CodeCursor
标签
电商
