Odoo 12. 如何重写一个被重写的函数?

Odoo 12. How to override an overrided function?

我想覆盖已经覆盖同一模型的相同方法的写入方法。

原方法是这样的:

@api.multi
    def write(self, values):
        if list(values.keys()) != ['time_ids'] and any(workorder.state == 'done' for workorder in self):
            raise UserError(_('You cannot modify a close workorder'))
        
        return super(MrpWorkorder, self).write(values)

我需要将 if 语句更改为:

@api.multi
    def write(self, values):
        if list(values.keys()) != ['time_ids'] and any(workorder.state == 'cancel' for workorder in self):
            raise UserError(_('You cannot modify a close workorder'))
        
        return super(MrpWorkorder, self).write(values)

但是当我这样做时,“超级”执行方法的旧内容。

所以,我需要知道如何覆盖被覆盖的方法。

为了满足我们的需求,解决方案比您想象的要简单:

只需将 return 更改为:

return super(MrpWorkorder, self).write(values)

为此:

return models.Model.write(self, values)

有了这个,您可以覆盖原始方法并避免所有其他存在的覆盖方法。 当你必须这样做时,这是一个非常特殊的情况,所以如果你不想丢失其他模块中的一些重写方法,请小心。

这也适用于 write 和 unlink 方法。

如果你想指定你想覆盖它的覆盖内置函数的模块,请按照以下步骤操作:

导入class(这里我从hr_holiday模块导入hr.leaveclass):

from odoo.addons.hr_holidays.models.hr_leave import HolidaysRequest as HRLeavesInherit

然后复制整个函数和return这个:

result = super(HRLeavesInherit,self).write(values)

HRLeavesInherit <这不是 inherit class 名称..所以你必须改变你的 inherit class 名称以不同。