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 名称以不同。
我想覆盖已经覆盖同一模型的相同方法的写入方法。
原方法是这样的:
@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 名称以不同。