Odoo 8 onchange继承模型

时间:2015-09-01 08:01:12

标签: odoo odoo-8

我有一个在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。

1 个答案:

答案 0 :(得分:1)

您在上面的代码中使用委托继承。委托继承不适用于模型方法。它只是简单地委托查找当前模型中找不到的字段到" parent"模型。

我认为你想要的是原型继承:

class ExtendedPartner(models.Model):
    _name = 'extendedpartner'
    _inherit = 'res.partner'

下图显示了Odoo中可用的三种继承类型:

three types of inheritence avaliable in Odoo

您目前使用ResPartner中的第一个("经典继承")(继承自res.partner)和ExtendedPartner中的最后一个(委托继承) 。我认为中间的(Prototype继承)更适合ExtendedPartner。它基本上以与标准Python继承非常相似的方式工作。

您可以阅读有关不同类型的继承in the documentation的更多信息(这也是上图中的来源)。