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': '方法名',
posted @ 2019-05-07 15:50  keenyeh  阅读(175)  评论(0编辑  收藏  举报