odoo12 取消动作中按钮的方法

  • 场景需求
    删除继承视图 凭证录入中的动作菜单下,发布日记账按钮

方法一

  • 使用<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视图回写到元模块的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容