odoo 怎么重写模块默认方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了odoo 怎么重写模块默认方法相关的知识,希望对你有一定的参考价值。

参考技术A

    继承models.Model

    成员变量_inherit指定对应要扩展的模块对象

    覆盖模块方法,写自己代码

以下是扩展销售单的一个例子,截取了在Odoo模块网上的“销售单保存写回价格表模块”这个很简单模块的一个片段。另外上面也提供模块教程。

from odoo import api, models, _

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    @api.model
    def create(self, vals):
        result = super(SaleOrder, self).create(vals)
        #你的代码
        return result

参考技术B 在应用菜单里面点开模块有一个卸载按钮 点击卸载确定就能卸载了,相当于未安装。 不过卸载模块有风险,如果模块间依赖多,慎重卸载模块。

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‘: ‘方法名‘,

 

    

 

以上是关于odoo 怎么重写模块默认方法的主要内容,如果未能解决你的问题,请参考以下文章

odoo自定义模块的安装动作

odoo9 继承父类的方法和重写父类的方法

Odoo与浪潮合资研发PS Cloud之设置交付方法

odoo action怎么上面的数字怎么去掉

odoo14-实际使用

Odoo 10:更改树视图中的默认搜索