odoo钩子函数

使用场景

  • 在odoo中,我们想在安装模块中。或者在卸载模块之后触发一些功能。我们可以使用hook来做。

安装时的基本流程为
1.若有preinit钩子,先运行
2.从模型定义中载入Python源码并根据需要更新数据库结构
3.载入插件数据文件并更新数据库
4.若有demo数据则进行安装
5.若有postinit钩子,则运行
6.对插件的视图定义进行验证
7.若激活了测试数据和测试流程,则对插件进行测试
8.更新数据库中的模块状态
9.根据插件的翻译文件更新数据库
以上preinit钩子和postinit钩子分别通过manifest.py中的pre_init_hook和post_init_hook进行定义,对应值为init.py中的函数名。在更新插件时要注意新增的依赖需要手动进行安装。

此段转载https://alanhou.org/odoo-11-addons/

三种hook

  • pre_init_hook
    在安装中如果有manifest中有,先执行此对应的钩子函数。
  • post_init_hook
    在安装好模块之后,会执行对应的函数。
    manifest中添加:
 'post_init_hook': 'post_init_hook',

init.py中写对应的方法。

def post_init_hook(cr, registry):
    env = Environment(cr, SUPERUSER_ID, {})
    menu_id = env.ref('base.menu_native').id
    env.ref('account.menu_finance').write({'parent_id': menu_id})

  • uninstall_hook
    在卸载模块之后,会执行对应的函数。
    manifest.py中添加:
    'uninstall_hook': 'uninstall_hook',

init.py中写对应的方法

def uninstall_hook(cr, registry):

    env = Environment(cr, SUPERUSER_ID, {})

    # 卸载之后改变核销分录action动作binding_model_id
    account_move_line = env.ref('account.model_account_move_line').id
    account_move_line_reconcile = env.ref('account.action_view_account_move_line_reconcile').id
    cr.execute("update ir_actions set binding_model_id= %s where id=%s", (account_move_line, account_move_line_reconcile))

此方法意思是在卸载模块之后,回写被删除的动作。

你可能感兴趣的:(odoo钩子函数)