第九十九章 附录(速查与综合练习)
定位:全书 工具箱章;对应白皮书 附录 A~F(其中 F 为独立 Markdown 文件,便于随官方链接更新)。
关于章号:本分册正文 第五十章至第九十八章 未单独拆章;速查表、对照表与术语 统一编入 第九十九章,便于印刷与 Pandoc 合并时 紧接第四十九章。
本章学习目标
- 能根据 ORM Changelog 制定 小版本升级检查项,并 自查代码中的废弃 API。
- 熟练使用
odoo-bin常用子命令与参数 完成 开发、测试、Shell、升级 等日常任务。 - 编写 前缀波兰式 domain,并 查阅文档确认 版本特有的
any/any!等操作符。 - 能为字段 选择合适 widget,并理解 字段类型与前端组件 的 绑定关系。
- 掌握 核心术语 的中英文对照,能 阅读英文官方文档 不迷路。
- 知道 教材章与官方 Tutorials / How-to / Reference 的 对应入口(附录 F)。
导读:附录不是「边角料」
附录在教材中承担 几件事:迁移时对照(A)、日常命令肌肉记忆(B)、表达式与 UI 速查(C、D)、术语统一(E)、与官网章节映射(F)。建议 打印 C、D、E 三折页;A、B 在 升级周 贴在显示器旁;F 可 浏览器书签 或 与 PDF 分册 同存。权威细节始终以 Odoo 19.0 官方文档 为准。
99.1 附录 A:Odoo 19 ORM Changelog 要点(摘要)
A.1 知识要点
- 环境访问:废弃
record._cr/_uid/_context,统一record.env.cr/env.user/env.context(第二十七章、第四十四章)。 - 显示名搜索:
_search_display_name等 新 API 与旧name_search的 并存/迁移 以 Changelog 为准。 - SQL 组合:
odoo.tools.SQL参数化拼接(第十五章)。 - 字段命名:部分标准字段
*_id后缀统一(如产品 UoM 等),自定义模块 应 对齐官方命名。 - Web 路由:
type='json'→type='jsonrpc'(第三十六章)。 - 装饰器:
@api.private等新语义(第四章)。 - 习惯:每个大版本升级 先 通读 Changelog 目录,再 对本仓库
grep关键词。
A.2 案例
自查清单(在副本分支执行):
rg "record\._cr|record\._uid|record\._context" custom_addons/
rg "type=['\"]json['\"]" custom_addons/
将命中行 列表化 → 逐条改 → 跑测试。
A.3 截图占位

A.4 本节练习
- 实操:列出你项目中将受 ORM 变更 影响的 5 处 API(文件:行 + 简述)。
- 判断:
name_search在新版中 已完全移除。( )(以当前文档为准,多为过渡期并存) - 简答:为何 迁移 要先 读 Changelog 再 跑 upgrade_code?
参考答案提示:2. 通常为 错 或 「视子方法而定」——以文档为准。3. 工具不能覆盖语义变更。
99.2 附录 B:CLI 命令速查
B.1 知识要点
- 配置:
-c odoo.conf指定配置;-d db指定数据库。 - 安装 / 升级:
-i module首次安装;-u module升级(执行迁移脚本)。 - 测试:
--test-enable;--stop-after-init跑完测试即退出(CI 常用)。 - 标签:
--test-tags过滤 at_install / post_install(第二十九章)。 - Shell:
./odoo-bin shell -c ... -d ...交互 ORM。 - 演示数据:
--without-demo=all禁用 demo(生产、CI)。 - 其他:
neutralize(第四十三章)、i18n-export/i18n-import(以odoo-bin --help为准)。
B.2 表格(节选)
| 场景 | 命令示例 |
|---|---|
| 启动开发 | ./odoo-bin -c odoo.conf -d devdb |
| 安装模块 | ./odoo-bin -c odoo.conf -d devdb -i my_module |
| 升级模块 | ./odoo-bin -c odoo.conf -d devdb -u my_module |
| 测试后退出 | ./odoo-bin -c odoo.conf -d testdb -i my_module --test-enable --stop-after-init |
| 只跑部分标签 | ./odoo-bin ... --test-tags post_install |
| Shell | ./odoo-bin shell -c odoo.conf -d devdb |
| 无 demo | ./odoo-bin ... --without-demo=all |
B.3 截图占位

B.4 本节练习
- 实操:写出你日常最常用的 3 条
odoo-bin参数组合 并 解释用途。 - 简答:
--without-demo=all的用途? - 判断:
-u会 自动 创建不存在的 数据库。( )
参考答案提示:3. 错。
99.3 附录 C:常用 Domain 操作符
C.1 知识要点
- 前缀波兰式:
&、|、!放在 操作数前;二元运算符 前 两个 条件。 - 比较:
=、!=、<、>、<=、>=、like、ilike、in、not in。 - 关系:
child_of、parent_of(版本差异见文档)。 - 量化:
any/not any用于 One2many/Many2many 子域(语法以 19.0 文档为准)。 - 新增操作符:如
any!等 务必查当前版本 Reference,勿死记旧博客。
C.2 表格(操作符节选)
| 操作符 | 含义 |
|---|---|
= / != |
相等 / 不等 |
< / > / <= / >= |
比较 |
like / ilike |
模糊匹配(ilike 忽略大小写) |
in / not in |
成员 / 非成员 |
child_of |
层级(类别、部门 等) |
any / not any |
子记录存在性(语法查文档) |
C.3 案例
无负责人或负责人是我:
['&', ('state', '=', 'draft'), '|', ('user_id', '=', False), ('user_id', '=', uid)]
(uid 在规则中 常用 占位符;代码里 用 user.id。)
C.4 截图占位

C.5 本节练习
- 实操:用 domain 表达 「无负责人 OR 负责人是我」(与上例对照)。
- 拓展:阅读文档确认
any!(若存在)在 目标版本 的 语法与用例。 - 简答:为何 复杂 domain 建议 抽成
@api.model方法?(第四十五章)
参考答案提示:3. 复用、测试、可读、防 XML 复制错误。
99.4 附录 D:字段类型与 Widget 对照(示例)
D.1 知识要点
- widget 绑定在视图 XML:
<field name="x" widget="..."/>;未指定 则用 字段类型默认组件。 - 版本差异:同一 widget 名 在 大版本 可能 换实现(OWL 化)。
- 自定义:Registry 注册字段组件(第三十五章)。
D.2 表格(示例,非全量)
| 字段类型 | 常用 widget |
|---|---|
selection |
statusbar、radio、priority |
many2many |
many2many_tags、many2many_checkboxes |
monetary |
monetary |
float |
percentage、timesheet_uom(视模块) |
binary |
image、pdf_viewer(视版本) |
integer |
handle(排序柄) |
char |
url、email、password |
text |
默认多行;Html 用 html 类型 |
D.3 截图占位

D.4 本节练习
- 实操:在 自定义模块 中选 3 个字段 更换 widget 做 UI A/B,截图 入
images/。 - 简答:widget 与字段类型不匹配 时 常见现象?
- 判断:所有
Float都应使用percentagewidget。( )
参考答案提示:3. 错。
99.5 附录 E:术语表(节选)
E.1 知识要点
- 统一术语 有利于 中英文文档对照、Code Review、客户沟通。
- 扩展:建议团队维护 私有术语表(客户行业专名)。
E.2 对照表(节选)
| 英文 | 中文 |
|---|---|
| Recordset | 记录集 |
| Environment (env) | 环境 |
| TransientModel | 临时模型 |
| AbstractModel | 抽象模型 |
| ACL (Access Control List) | 访问控制列表 |
| Record Rule | 记录规则 |
| QWeb | 模板语言 |
| OWL | Odoo Web Library(组件框架) |
| Action | 动作 |
| XML ID / External ID | 外部标识符 |
| Manifest | 模块清单(__manifest__.py) |
| Cron | 定时任务 |
| Chatter | 消息关注区(mail.thread) |
| Widget | 字段小部件 / 前端组件 |
| Registry | 注册表 |
| Service (frontend) | 前端服务 |
| Patch / Monkey patch | 运行时补丁 |
| ORM | 对象关系映射 |
| Controller | 控制器(HTTP 路由) |
| jsonrpc | JSON-RPC 类型路由 |
| Company | 公司(多公司) |
| Currency rate | 汇率 |
E.3 截图占位

E.4 本节练习
- 互测:两人互考 10 个 术语 英文拼写与中文含义。
- 翻译:将 第四十九章 某一节标题 译成英文目录条目(练习双语目录)。
- 拓展:补充 5 个 你项目常用的 业务术语 中英对照。
99.6 附录 F:官方文档对照与延伸阅读
附录 F 为 独立文件(表格与外链多,便于单独修订、不必重排全书页码):
内容包括:Developer 总入口 下 Tutorials / How-to / Reference 的阅读建议,教材各章 ↔ 官方 Reference 与 How-to 精选 对照表,以及 User Docs、Contributing 等周边链接。前言「本书与 Odoo 19」亦指向该文件。
本章综合练习(印刷装订前自检)
- 图档:核对全书
./images/占位文件名 与正文![]()一致(可脚本提取)。 - 排版:用 Pandoc 试排 一章 + 本附录 PDF,检查 中文换行、代码块、表格跨页(全书索引.md 有示例命令)。
- 习题册:全书 综合练习 参考答案见项目内
answers.md;若另印 PDF,避免 与 学员正文同册。 - 迁移周:用 附录 A + B 写 「19.0 升级一日 checklist」 10 行以内。
- 综合:解释 Domain 前缀表达式 与 SQL WHERE 的 思维差异(各一句)。
本附录对应白皮书「附录 A~F」结构(F 见上节链接文件);章次编为 第九十九章 以衔接 第四十九章。