- 場景需求
刪除繼承視圖 憑證錄入中的動作菜單下,發(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視圖回寫到元模塊的。