美文网首页
odoo12 取消动作中按钮的方法

odoo12 取消动作中按钮的方法

作者: 伟大的洪立 | 来源:发表于2019-04-14 18:52 被阅读0次
    • 场景需求
      删除继承视图 凭证录入中的动作菜单下,发布日记账按钮

    方法一

    • 使用<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视图回写到元模块的。

    相关文章

      网友评论

          本文标题:odoo12 取消动作中按钮的方法

          本文链接:https://www.haomeiwen.com/subject/rhgrwqtx.html