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(这也是上图的来源)。