Odoo自定义模块安装(附:hook的使用以及在data文件中调用模型函数)
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10825931.html
一:自定义odoo的模块安装
对于odoo内置的一些模块,我们想在模块安装时触发一些动作,来修改某些信息、预安装一些模块等,应该怎么做?
二:重写odoo自带模块的某些方法
一种情形是:对于odoo自带的模块的模型,我们想更改它某些方法,如:更改语言包、修改时间格式等。
1:在模块根目录下,新建与要修改方法的模型的同名的py文件;并且在其中定义一个类,继承自原模型;重写方法。如:更改语言模块,重写中文安装方法
res_lang.py:
# -*- coding: utf-8 -*-
from odoo import models,fields,api
class lang(models.Model):
_inherit = "res.lang"
_description = "Languages"
@api.model
def install_lang_zh(self):
lang_ids = self.search([('code', '=', 'zh_CN')])
if not lang_ids:
self.load_lang('zh_CN')
return self.install_lang()
2:同级目录下,新建同名的xml文件,在其中通过 <function>标签调用刚才定义的方法
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="0">
<function name="方法名" model="模型名(继承的模型名)">
<value>参数</value>
<value>参数</value>
</function>
</data>
</odoo>
3:将xml文件配置到模块的manifest文件的 data 选项中,使得模块安装时自动加载该xml文件,从而调用刚才定义的方法
'data': [
'模型名.xml',
],
三:新增方法
对于odoo内置模型没有的方法,我们需要在模块的init文件中定义,然后在manifest文件中通过锚点来指定模块安装后自动调用该方法。
1:在模块的 init 文件中定义方法
# -*- coding: utf-8 -*-
from . import controllers
from . import models
from odoo import api, SUPERUSER_ID
def 方法(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
...具体操作
2:在 manifest 中通过 hook 触发
'post_init_hook': '方法名',

浙公网安备 33010602011771号