Odoo 视图继承不是“把 XML 复制一份”:XPath、position 和 primary/extension 讲透
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
TOPIC PICKS
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
可以顺着继续读的相邻方向
用 website_sale 和 website_event_crm 的真实 XML 片段说明 inherit_id、xpath 和 position 的工作方式,以及为什么一个 XPath 就能决定整页布局。
从 ir.ui.view 的 primary/extension、invalid_locators 和 apply_inheritance_specs 看懂视图继承。
结合 sale_pdf_quote_builder 源码,讲清 Odoo 如何校验 PDF、抽取表单字段、把报价头尾与产品文档分层挂接,再通过路径映射把 sale.order / sale.order.line 数据灌进 PDF。
很多人一看到视图改动没显示,就立刻怀疑 XPath、怀疑浏览器缓存。但从 Odoo 19 的 `ir_ui_view.py` 看,真正需要先想清的是:这次拿到的是哪一个 cache key、这个 key 下缓存的是哪一种视图变体,以及用户最终看到的是否还是缓存结果再经过 group 裁剪后的版本。本文把这个链路讲透。
从 Odoo 19 的 web onchange 实现出发,解释 onchange 为什么本质上是在表单草稿上做推演,而不是在数据库里真正写记录;也讲清它和 create/write/constraints 该如何分工。
很多人把 Sales Product Matrix 理解成“销售单上多一个二维表”;但标准 Odoo 明确把矩阵读取、变体生成、数量差异计算和销售行更新都放在服务端完成,原因是前端并不会加载全部订单行。它还会处理 no-variant 属性、重复销售行冲突、草稿/已确认单的删改边界,并支持把已录矩阵反填回报价 PDF。本文把这条链讲透。