为了账号安全,请及时绑定邮箱和手机立即绑定

如何重写odoo11中的主要创建方法?

如何重写odoo11中的主要创建方法?

PHP
狐的传说 2023-11-09 10:44:33
我有很多模型(大约 30 个)会重写 create 方法来检查许可证状态,所有模型都是这样的:class Model1(models.Model):    _name='testing_model1'    @api.model    def create(self)        check_license(self)        return super(Model1, self).create(values)有没有办法在主创建中添加“check_license”函数,这样我就不必在每个模型中都编写它?
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

你可以通过 munkey patching 来做到这一点,但我真的不建议这样做,你应该做的是创建一个小模块来执行此操作并确保所有其他模块都依赖于它,这样对检查的调用将是只做过一次。

请放心,当您在两个模块中重复代码时,请考虑将其提取到一个小模块中,并确保这两个模块依赖于它。

就像您的情况一样,您可以创建模块,check_license将所有相关代码放入此操作中,修复对其他 30 个模块的依赖关系,这将确保当您安装其中一个模块时,将首先安装新模块,主要好处是调用即使您安装了所有 30 个模块,检查许可证也只会发生一次


查看完整回答
反对 回复 2023-11-09
?
不负相思意

TA贡献1777条经验 获得超10个赞

我看到两种简单的可能性:


1.Odoo继承的使用


Odoo的继承机制也在基础模型上发挥着作用。以下示例来自 Odoo V13 模块base_import,但在 Odoo V11 中也有一些示例(例如在 中web):


class Base(models.AbstractModel):

    _inherit = 'base'


    @api.model

    def get_import_templates(self):

        """

        Get the import templates label and path.


        :return: a list(dict) containing label and template path

                 like ``[{'label': 'foo', 'template': 'path'}]``

        """

        return []

以下是您需要的代码(在更高版本中不起作用,因为create已更改):


class Base(models.AbstractModel):

    _inherit = 'base'


    def create(self, values):

        """

        Extended core method to implement a license check,

        before creating a record.

        """

        check_license(self)

        return super().create(values)

2.使用mixin(Odoo代码中有很多例子)


可以使用 mixin 类来限制某些模型的许可证检查,这些模型将继承此 mixin。1. 概念并不限制它(但它也是可能的)。


class LicenseCheckMixin(models.AbstractModel):

    _name = 'license.check.mixin'


    def create(self, values):

        """

        Extended create method to implement a license check,

        before creating a record.

        """

        check_license(self)

        return super().create(values)

然后你可以在其他 Odoo 模型中继承这个 mixin:


class SaleOrder(models.Model):

    _name = 'sale.order'

    _inherit = ['sale.order', 'license.check.mixin']


查看完整回答
反对 回复 2023-11-09
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信