Odoo 8 onchange 继承模型
Odoo 8 onchange on inherited models
我有一个在 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。
您在上面的代码中使用了委托继承。委托继承不适用于模型方法。它只是简单地委托查找当前模型中未找到的字段到"parent"模型。
我觉得你想要的是原型继承:
class ExtendedPartner(models.Model):
_name = 'extendedpartner'
_inherit = 'res.partner'
下图显示了 Odoo 中可用的三种继承类型:
您目前在 ResPartner
(继承自 res.partner
)中使用第一个 ("classic inheritance"),在 ExtendedPartner
中使用最后一个(委托继承)。我认为中间的(原型继承)更适合 ExtendedPartner
。它基本上以与标准 Python 继承非常相似的方式工作。
您可以阅读更多关于不同类型的继承in the documentation(这也是上图的来源)。
我有一个在 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。
您在上面的代码中使用了委托继承。委托继承不适用于模型方法。它只是简单地委托查找当前模型中未找到的字段到"parent"模型。
我觉得你想要的是原型继承:
class ExtendedPartner(models.Model):
_name = 'extendedpartner'
_inherit = 'res.partner'
下图显示了 Odoo 中可用的三种继承类型:
您目前在 ResPartner
(继承自 res.partner
)中使用第一个 ("classic inheritance"),在 ExtendedPartner
中使用最后一个(委托继承)。我认为中间的(原型继承)更适合 ExtendedPartner
。它基本上以与标准 Python 继承非常相似的方式工作。
您可以阅读更多关于不同类型的继承in the documentation(这也是上图的来源)。