一:自定义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‘: ‘方法名‘,