我有一个在res.partner上实现onchange方法的模块。如果我创建一个继承res.partner的新模型,则不会调用onchange。有没有办法让onchange变得通用,所以它也被称为继承模型?
示例:
class ResPartner(models.Model):
_inherit = 'res.partner'
@api.onchange('zip')
def _valid_zip(self):
print 'Validating zip...'
class ExtendedPartner(models.Model):
_name = 'extendedpartner'
_inherits = {'res.partner': 'partner_id'}
如果我更改extendedpartner上的邮政编码,则不会调用onchange。
答案 0 :(得分:1)
您在上面的代码中使用委托继承。委托继承不适用于模型方法。它只是简单地委托查找当前模型中找不到的字段到" parent"模型。
我认为你想要的是原型继承:
class ExtendedPartner(models.Model):
_name = 'extendedpartner'
_inherit = 'res.partner'
下图显示了Odoo中可用的三种继承类型:
您目前使用ResPartner
中的第一个("经典继承")(继承自res.partner
)和ExtendedPartner
中的最后一个(委托继承) 。我认为中间的(Prototype继承)更适合ExtendedPartner
。它基本上以与标准Python继承非常相似的方式工作。
您可以阅读有关不同类型的继承in the documentation的更多信息(这也是上图中的来源)。