Odoo 16自定义模块树形视图头部按钮不显示求助
Odoo 16树形视图头部按钮正确添加方式
你按钮不显示的核心原因是树形视图内不能用<header>标签包裹按钮,Odoo 16的树形视图有两种标准的按钮添加方式,按需选择:
方式一:直接添加顶部操作按钮
把按钮直接放在<tree>标签下即可,无需额外包裹标签,修改后的视图代码:
<record id="cc_order_tree_view" model="ir.ui.view"> <field name="name">cc.order.list</field> <field name="model">cc.order</field> <field name="arch" type="xml"> <tree> <button name="action_mark_as_discarded" string="Discard" class="oe_highlight" type="object" data-hotkey="d"/> <field name="number" /> <field name="itemsTotal" /> <field name="total" /> <field name="odoo_status" /> </tree> </field> </record>
方式二:通过动作(Action)添加批量操作按钮
如果需要的是勾选记录后才显示的批量操作按钮,建议通过窗口动作配置:
- 先定义服务器动作(关联你的方法):
<record id="action_mark_as_discarded_server" model="ir.actions.server"> <field name="name">Mark as Discarded</field> <field name="model_id" ref="model_cc_order"/> <field name="state">code</field> <field name="code"> records.action_mark_as_discarded() </field> </record>
- 在树形视图对应的窗口动作中添加工具栏按钮:
<record id="cc_order_action" model="ir.actions.act_window"> <field name="name">CC Orders</field> <field name="res_model">cc.order</field> <field name="view_mode">tree,form</field> <field name="view_id" ref="cc_order_tree_view"/> <field name="toolbar" eval="{'action': [('action_mark_as_discarded_server', 'primary')]}"/> </record>
必须检查的关键点
- 确保
cc.order模型中已实现action_mark_as_discarded方法,示例代码:
class CCOrder(models.Model): _name = 'cc.order' # 你的字段定义... number = fields.Char(string="Number") itemsTotal = fields.Float(string="Items Total") total = fields.Float(string="Total") odoo_status = fields.Selection([('draft','Draft'),('discarded','Discarded')], string="Status") def action_mark_as_discarded(self): self.write({'odoo_status': 'discarded'}) return True
- 检查用户权限:确保当前用户拥有
cc.order模型的读写权限,以及调用该方法的权限,可在ir.model.access中配置对应权限规则。 - 若需控制按钮显示条件,可添加
attrs属性,比如已废弃的记录隐藏按钮:
<button name="action_mark_as_discarded" string="Discard" class="oe_highlight" type="object" data-hotkey="d" attrs="{'invisible': [('odoo_status', '=', 'discarded')]}"/>
内容的提问来源于stack exchange,提问作者Biologeek
相关产品推荐
相关产品推荐

