Odoo 视图继承不是“把 XML 复制一份”:XPath、position 和 primary/extension 讲透
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
TOPIC PICKS
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
可以顺着继续读的相邻方向
很多人把前端保存理解成“RPC 调一次 write 就结束”。但 web 客户端真实常用的是 web_save + web_read 组合。本文从 web/models/models.py 源码讲清 create/write、next_id 与保存后回读为什么会影响你看到的结果。
视图继承不是谁写在后面谁生效,而是按继承树、优先级和选择器逐层合并。理解这条链,才能让 XML 改动更稳。
菜单可见性不是单纯看 group_ids。Odoo 还会批量预读 action、检查模型读权限,并把祖先菜单一起补出来。
基于 Odoo 19 的 ir.ui.view 源码,聚焦很多人比 XPath 更容易忽略的部分:priority、mode=primary、inherit 树组合顺序与访问边界。理解这些,才能真正解释“为什么我的 patch 生效过,又像没生效”。
用 website_sale 和 website_event_crm 的真实 XML 片段说明 inherit_id、xpath 和 position 的工作方式,以及为什么一个 XPath 就能决定整页布局。
很多人看到 website_cf_turnstile 只有几段前端脚本和一个 ir.http 扩展,就以为它只是给表单塞了个 Cloudflare 小组件。其实它真正关键的地方,是把 site key 注入前端、把提交按钮先锁住、再在控制器统一走 _verify_request_recaptcha_token 校验,并把各种失败状态翻译成可控异常。