Odoo 15表单视图中如何在Create按钮旁添加自定义按钮
在Odoo表单视图的「Create」按钮旁添加自定义按钮的正确方法
要在Odoo表单的「Create」按钮旁插入自定义按钮,核心是精准定位到顶部动作栏的Create按钮,以下是具体解决方法和常见问题排查:
正确的XML实现示例
通过继承原表单视图,使用XPath定位到Create按钮并插入自定义按钮:
<record id="custom_model_form_inherit" model="ir.ui.view"> <field name="name">your.model.name.form.custom</field> <field name="model">your.model.name</field> <!-- 替换为你要继承的原表单视图ID --> <field name="inherit_id" ref="base.model_res_partner_form"/> <field name="arch" type="xml"> <!-- 在Create按钮之后插入自定义按钮 --> <xpath expr="//form/header/button[@name='create']" position="after"> <button name="action_custom_operation" type="object" string="自定义操作" class="btn-secondary"/> </xpath> </field> </record>
- 替换
your.model.name为你的业务模型名 inherit_id的ref值要对应原表单视图的ID(比如伙伴视图是base.model_res_partner_form)- 自定义按钮的
name需要对应模型中定义的同名方法:
class YourModel(models.Model): _name = 'your.model.name' def action_custom_operation(self): # 自定义按钮逻辑 self.ensure_one() # 示例:弹出提示 return { 'type': 'ir.actions.client', 'tag': 'display_notification', 'params': { 'message': '自定义按钮触发成功', 'type': 'success' } }
常见问题排查
1. 自定义按钮被放到表单内部header
这是因为XPath误定位到了表单<sheet>内的<header>标签,而非顶部动作栏的<header>。解决方法是使用更精确的XPath://form/header/button[@name='create'],明确指定定位<form>根标签下的<header>里的Create按钮。
2. XPath报错找不到按钮
- 检查按钮属性:有些自定义视图可能修改了Create按钮的
name属性,或者用type="action"替代了type="object"。可以通过浏览器F12查看页面DOM,找到Create按钮的实际属性,比如改用//button[@string='Create']定位(注意多语言环境下string会被翻译,优先用name)。 - 检查继承视图ID:确认
inherit_id的ref值正确指向原表单视图,否则继承视图无法找到父视图的元素。 - 适配Odoo版本:Odoo 16+的顶部按钮栏结构有调整,若上述XPath无效,可尝试定位到包含Create按钮的
div容器,比如:
<xpath expr="//div[contains(@class, 'o_form_buttons_view')]/button[@name='create']" position="after"> <!-- 自定义按钮 --> </xpath>
实用技巧
- 用浏览器开发者工具(F12)查看页面的HTML结构,直接复制Create按钮的XPath,确保定位精准。
- 按钮样式使用Odoo内置类(如
btn-secondary、btn-success),保持和系统按钮风格一致。
内容的提问来源于stack exchange,提问作者Jessy Rakotondrainibe
相关产品推荐
相关产品推荐

