Odoo 视图继承不是“把 XML 复制一份”:XPath、position 和 primary/extension 讲透
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
TOPIC PICKS
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
可以顺着继续读的相邻方向
很多人把 Sales Product Matrix 理解成“销售单上多一个二维表”;但标准 Odoo 明确把矩阵读取、变体生成、数量差异计算和销售行更新都放在服务端完成,原因是前端并不会加载全部订单行。它还会处理 no-variant 属性、重复销售行冲突、草稿/已确认单的删改边界,并支持把已录矩阵反填回报价 PDF。本文把这条链讲透。
很多人以为 read_group 的日期分组只是 SQL 里的 date_trunc。可从 Odoo ORM 源码看,真正展示给用户的分组标签、用于 drill-down 的 __domain、以及 datetime 的时区换算,都是在 read_group 格式化阶段重新拼出来的。
很多人以为 Odoo 看板上的空列只是前端自己补出来的占位 UI,但 Odoo 19 实际把这件事做进了字段定义与 read_group 结果整形层:字段声明 group_expand 后,系统会主动把“当前没有记录的组”补进结果里。
很多人调 Odoo 视图继承时,第一反应是 XPath 写错了。但从 ir_ui_view.py 的 locate_node、apply_inheritance_specs 与 _raise_view_error 看,真正的问题往往是目标节点在合并后的树里早就变形、换层、被前序扩展改过,或者 position 用错了。
Documents 前端的关键不只是预览区,而是 access_token 路由、首次恢复选中文档、右侧信息面板与批量动作菜单这套状态编排。
Timesheet Grid 的计时能力并不是一个按钮,而是 timer service、响应式状态、字段元数据和工时单位显示一起配合的交互系统。