如何 hide/delete 表单中的操作菜单?
How to hide/delete action menu in a form?
我找不到隐藏或删除表单外操作菜单的方法。
我试过:
<delete>
标签
- 替换它
- 使用
ir.values
- 域
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>
希望这对你有用。
我不知道这段代码的某些部分是做什么的,但我找到了它并对其进行了编辑以解决我的问题。该动作现在已隐藏。
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
有两种简单的可能性:
- 只需在服务器操作的技术设置下更改它
服务器操作表单视图上有一个按钮,可以创建或取消链接操作的菜单操作。可以找到这两个按钮的代码 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
我不确定这是否不利于模块更新,但如果有人可以对其进行测试并将其作为评论写在这个答案下,我将不胜感激。
如您所见,第二种可能性来自第一种。
- 从服务器操作中删除
binding_model_id
<record id="product.action_product_template_price_list_report" model="ir.actions.server">
<field name="binding_model_id" eval="False" />
</record>
我找不到隐藏或删除表单外操作菜单的方法。
我试过:
<delete>
标签- 替换它
- 使用
ir.values
- 域
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>
希望这对你有用。
我不知道这段代码的某些部分是做什么的,但我找到了它并对其进行了编辑以解决我的问题。该动作现在已隐藏。
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
有两种简单的可能性:
- 只需在服务器操作的技术设置下更改它
服务器操作表单视图上有一个按钮,可以创建或取消链接操作的菜单操作。可以找到这两个按钮的代码 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
我不确定这是否不利于模块更新,但如果有人可以对其进行测试并将其作为评论写在这个答案下,我将不胜感激。
如您所见,第二种可能性来自第一种。
- 从服务器操作中删除
binding_model_id
<record id="product.action_product_template_price_list_report" model="ir.actions.server">
<field name="binding_model_id" eval="False" />
</record>