求助:如何在Odoo产品页面的变体标签页添加按钮?
解决Odoo产品页面添加按钮时XPath定位失败的问题
错误原因分析
你遇到的 Element '<xpath expr="//page[@name='variants']">' cannot be located in parent view 错误,本质是XPath找不到目标页面节点,常见原因有三个:
- 继承的父视图不正确
- 目标页面的
name属性与你写的不符(不同Odoo版本可能有差异) - XPath路径不够精确,导致匹配不到节点
具体解决步骤
1. 确认继承的父视图ID
确保你的XML视图继承的是产品表单的官方父视图,代码示例:
<record id="product_product_form_inherit_custom" model="ir.ui.view"> <field name="name">product.product.form.inherit.custom</field> <field name="model">product.product</field> <!-- 继承官方产品表单视图 --> <field name="inherit_id" ref="product.product_product_form_view"/> <field name="arch" type="xml"> <!-- 你的按钮代码放在这里 --> </field> </record>
2. 检查目标页面的真实name属性
不同Odoo版本中,产品变体页面的name属性有变化:
- Odoo 14及更早版本:变体页面
name为variants - Odoo 15+版本:变体页面
name改为attributes
你可以通过开发者模式验证:开启开发者模式 → 打开产品表单 → 点击「编辑视图: 表单」 → 找到变体所在的<page>标签,查看其name属性。
如果是Odoo 15+,修改XPath如下:
<xpath expr="//page[@name='attributes']" position="inside"> <button string="Custom Button" type="object" name="custom_button_method"/> </xpath>
3. 使用更精确的XPath路径
如果直接找<page>节点存在冲突,可限定父级节点缩小范围,比如先定位到表单内的笔记本组件:
<xpath expr="//form//notebook/page[@name='attributes']" position="inside"> <button string="Custom Button" type="object" name="custom_button_method"/> </xpath>
4. 验证模块依赖
确保你的模块__manifest__.py中已依赖product模块:
'depends': ['base', 'product'],
内容的提问来源于stack exchange,提问作者ahmed mohamady
相关产品推荐
相关产品推荐

