通过data/xxx.xml
的方式自动产生一些预设资料,xml,是不是我们的简单逻辑比较,这个时候,就可以通过hook的方式比较。
__manifest__.py代码:
{
......
'pre_init_hook': 'pre_init_hook',
'post_init_hook': 'post_init_hook',
'uninstall_hook': 'uninstall_hook',
'post_load': 'post_load_hook',
'application': True,
}
四种hook:
pre_init_hook
在安装插件之前,会先执行他,执行完成后,才开始安装插件。(更新不会生效)
post_init_hook
在插件完成之后,会执行他。(更新不会生效)
uninstall_hook
在插件完成之后,会执行他。
post_load
这个特殊比较,他在更新生效时当你使用 odoo-bin CLI 或时,优先pre_init_hook
。
post_load
进比较阶,请参考odoo源码。
__init__.py代码:
from odoo import api, SUPERUSER_ID
import logging
_logger = logging.getLogger(__name__)
def pre_init_hook(cr):
env = api.Environment(cr, SUPERUSER_ID, {})
# data = env[......].search([......])
_logger.warning('=== pre_init_hook ===')
def post_init_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
# data = env[......].search([......])
_logger.warning('=== post_init_hook ===')
def uninstall_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
# data = env[......].search([......])
_logger.warning('=== uninstall_hook ===')
def post_load_hook():
_logger.warning('=== post_load_hook ===')
使用CLI的方式把这个模块装上:
post_load_hook执行 pre_init_hook执行 post_init_hook执行
post_load_hook
-> pre_init_hook
-> post_init_hook
卸载时:uninstall_hook开始执行