如何 hide/delete 表单中的操作菜单?

How to hide/delete action menu in a form?

我找不到隐藏或删除表单外操作菜单的方法。

我试过:

None 他们工作。

这是标准 xml 文件中的操作按钮代码。

<record id="action_product_template_price_list_report" model="ir.actions.server">
    <field name="name">Generate Pricelist</field>
    <field name="groups_id" eval="[(4, ref('product.group_product_pricelist'))]"/>
    <field name="model_id" ref="product.model_product_template"/>
    <field name="binding_model_id" ref="product.model_product_template"/>
    <field name="state">code</field>
    <field name="code">
ctx = env.context
ctx.update({'default_pricelist': env['product.pricelist'].search([], limit=1).id})
action = {
    'name': 'Pricelist Report',
    'type': 'ir.actions.client',
    'tag': 'generate_pricelist',
    'context': ctx,
}
    </field>
</record>

Hide print action

希望这对你有用。

我不知道这段代码的某些部分是做什么的,但我找到了它并对其进行了编辑以解决我的问题。该动作现在已隐藏。

from odoo import api, models, tools

class IrActionsInherit(models.Model):
    _inherit = 'ir.actions.actions'

    @api.model
    @tools.ormcache('frozenset(self.env.user.groups_id.ids)', 'model_name')
    def get_bindings(self, model_name):
        result = super(IrActionsInherit, self).get_bindings(model_name)
        actions = result.get('action')
        for action in actions:
            if action.get('name') == 'Generate Pricelist':
                actions.remove(action)
                result.update({'action': actions})
        return result

有两种简单的可能性:

  1. 只需在服务器操作的技术设置下更改它

服务器操作表单视图上有一个按钮,可以创建或取消链接操作的菜单操作。可以找到这两个按钮的代码 here

def create_action(self):
    """ Create a contextual action for each server action. """
    for action in self:
        action.write({'binding_model_id': action.model_id.id,
                        'binding_type': 'action'})
    return True

def unlink_action(self):
    """ Remove the contextual actions created for the server actions. """
    self.check_access_rights('write', raise_exception=True)
    self.filtered('binding_model_id').write({'binding_model_id': False})
    return True

我不确定这是否不利于模块更新,但如果有人可以对其进行测试并将其作为评论写在这个答案下,我将不胜感激。

如您所见,第二种可能性来自第一种。

  1. 从服务器操作中删除 binding_model_id
<record id="product.action_product_template_price_list_report" model="ir.actions.server">
    <field name="binding_model_id" eval="False" />
</record>