如何基于带有状态的布尔字段在 odoo stock.picking 表单中隐藏验证按钮

How To Hide Validate Button in odoo stock.picking form based on boolean field with states

我正在尝试隐藏 stock.picking 表单上的验证按钮,我正在搜索 stock.view_picking_form 上的按钮并找到名称为 button_validate 的两个按钮。

 <button name="button_validate" attrs="{'invisible': ['|', ('state', 'in', ('waiting','confirmed')), ('show_validate', '=', False)]}" string="Validate" type="object" class="oe_highlight" groups="stock.group_stock_user"/>
 <button name="button_validate" attrs="{'invisible': ['|', ('state', 'not in', ('waiting', 'confirmed')), ('show_validate', '=', False)]}" string="Validate" type="object" groups="stock.group_stock_user" class="o_btn_validate"/>

在我的情况下,我想像那样使用 xbath 隐藏基于布尔字段的第一个

 <xpath expr="//button[@name='button_validate']" position="attributes">
       <attribute name="attrs">{'invisible': ['|','|', ('state', 'in', ('waiting','confirmed')), ('show_validate', '=', False),('is_has_access', '=', 'False')]}</attribute>
 </xpath>

保存并升级模块后,我发现 attrs 已更新按钮信息,但即使 Field = False,它仍然可见

那么我怎样才能做到这一点并隐藏这个按钮呢? 任何帮助将不胜感激

有时退一步(字面意思)会有所帮助 ;-)

('show_validate', '=', False),('is_has_access', '=', 'False')

你看到这两个域元组之间的区别了吗?关注价值观,是的,一个有引号,一个没有。一个有效,一个无效。

也许可以试试:

('show_validate', '=', False),('is_has_access', '=', False)

但为什么 Odoo 没有抛出错误?那是因为字符串是一个有效的布尔值并且总是表示 True.