odoo自定义模块的安装动作

 

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

 

    

 

文章来自:https://www.cnblogs.com/ygj0930/p/8439790.html
© 2021 jiaocheng.bubufx.com  联系我们
ICP备案:鲁ICP备09046678号-3