美文网首页
odoo钩子函数

odoo钩子函数

作者: 伟大的洪立 | 来源:发表于2019-05-07 16:53 被阅读0次

    使用场景

    • 在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钩子函数

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