- 场景需求
删除继承视图 凭证录入中的动作菜单下,发布日记账按钮
方法一
- 使用<delete> 标签 动作ID,model等删除
方法二
- 先找到account中发布日记账按钮的action源码, 将binding_model_id 属性改成eval='False', 不关联对应的动作,如图:
<record id="account.action_validate_account_move" model="ir.actions.act_window">
<field name="name">Post Journal Entries</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">validate.account.move</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="account.validate_account_move_view"/>
<field name="context">{}</field>
<field name="target">new</field>
<field name="binding_model_id" eval="False"/>
</record>
- 这样做会有一种缺陷,在我们卸载自己的模块后, odoo原生的account模块中的日记账按钮也会被删除。
解决方法
- 在init 文件中添加钩子函数。
def uninstall_hook(cr, registry):
"""
卸载之后,改变发布日记账分录action动作binding_model_id
:param cr:
:param registry:
:return:
"""
env = Environment(cr, SUPERUSER_ID, {})
account_move = env.ref('account.model_account_move').id
validate_account_move = env.ref('account.action_validate_account_move').id
cr.execute("update ir_actions set binding_model_id= %s where id=%s", (account_move, validate_account_move,))
需要在manifest.py中添加, 在执行的时候触发钩子函数
'uninstall_hook': 'uninstall_hook'
还可以直接设置权限组,重写动作视图,放入权限组中。
最新发现一种情况
当动作按钮写在data数据中,上述方法不生效。
- 原因是odoo的data数据只加载一次。
可以直接<delete>干掉这个动作,比较粗暴。 当然干掉之后还是要使用钩子在卸载模块的时候,将被我们干掉action视图回写到元模块的。
网友评论