You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何检测两个selection字段值并隐藏按钮?附Odoo代码尝试

Odoo视图继承:根据Selection字段值隐藏指定按钮

我最近在做Odoo销售订单模块的定制,需求是根据订单上两个selection字段的取值组合,把action_cancel按钮设置为不可见。目前已经写了部分视图继承代码,但还没完成,先把现有代码贴出来:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="orchid_sale_order_cancel_request_inherit" model="ir.ui.view">
<field name="name">sale_order_cancel_request</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<button name="action_cancel" position=...

其实这个需求的核心是利用Odoo视图的attrs属性做动态可见性控制,我整理了完整的实现代码和关键点:

完整实现代码

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <record id="orchid_sale_order_cancel_request_inherit" model="ir.ui.view">
        <field name="name">sale_order_cancel_request</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_order_form"/>
        <field name="arch" type="xml">
            <!-- 定位到action_cancel按钮,修改它的属性 -->
            <button name="action_cancel" position="attributes">
                <!-- 这里替换成你实际的两个selection字段和目标值 -->
                <!-- 示例:当state为'confirmed'且自定义字段custom_cancel_status为'disallow'时隐藏按钮 -->
                <attribute name="attrs">{'invisible': [('state', '=', 'confirmed'), ('custom_cancel_status', '=', 'disallow')]}</attribute>
            </button>
        </field>
    </record>
</odoo>

关键说明

  • position="attributes"来修改原有按钮的属性,这种方式不会破坏原视图的其他设置,比替换整个按钮更稳妥
  • attrsinvisible参数接受domain表达式,你可以灵活调整条件:
    • 多个条件同时满足:直接把条件并列在列表里,比如[('field1', '=', 'val1'), ('field2', '=', 'val2')]
    • 满足任一条件:用|来表示或关系,比如['|', ('field1', '=', 'val1'), ('field2', '=', 'val2')]
  • 要确保你用到的两个selection字段确实属于sale.order模型(包括你通过模型继承添加的自定义字段)

内容的提问来源于stack exchange,提问作者vbt

火山引擎 最新活动