odoo12 取消動作中按鈕的方法

  • 場景需求
    刪除繼承視圖 憑證錄入中的動作菜單下,發(fā)布日記賬按鈕

方法一

  • 使用<delete> 標(biāo)簽 動作ID,model等刪除

方法二

  • 先找到account中發(fā)布日記賬按鈕的action源碼, 將binding_model_id 屬性改成eval='False', 不關(guān)聯(lián)對應(yīng)的動作,如圖:
        <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 文件中添加鉤子函數(shù)。
def uninstall_hook(cr, registry):
    """
    卸載之后,改變發(fā)布日記賬分錄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中添加, 在執(zhí)行的時候觸發(fā)鉤子函數(shù)

'uninstall_hook': 'uninstall_hook'

還可以直接設(shè)置權(quán)限組,重寫動作視圖,放入權(quán)限組中。

最新發(fā)現(xiàn)一種情況

當(dāng)動作按鈕寫在data數(shù)據(jù)中,上述方法不生效。

  • 原因是odoo的data數(shù)據(jù)只加載一次。
    可以直接<delete>干掉這個動作,比較粗暴。 當(dāng)然干掉之后還是要使用鉤子在卸載模塊的時候,將被我們干掉action視圖回寫到元模塊的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容