使用委托继承嵌入模型

来自Odoo大V社-odoo中文开发手册
95102545讨论 | 贡献2017年4月17日 (一) 10:45的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

委托继承不常用,但它可以提供非常方便的解决方案。 它通过_inherits属性(注意s)通过字典映射继承模型与字段的关系,并关联它们。 一个很好的例子是标准用户的模型,res.users; 它嵌入了一个合作伙伴模型:

from odoo import models, fields
class User(models.Model):
_name = 'res.users'
_inherits = {'res.partner': 'partner_id'}
partner_id = fields.Many2one('res.partner')

使用委托继承,res.users模型嵌入继承的模型res.partner,以便在创建新的User类时,还将创建一个合作伙伴,并且对其的引用保留在User类的partner_id字段中, 它与面向对象编程中的多态性概念有一些相似之处。
通过委派机制,来自继承模型和合作伙伴的所有字段都可用,就像它们是User类字段一样。 例如,合作伙伴名称和地址字段显示为User类字段,但实际上,它们存储在链接的合作伙伴模型中,不会发生数据重复。
与原型继承相比,这样做的优点是不需要在几个表之间重复数据结构,例如地址。 任何需要包含地址的新模型都可以将其委派给嵌入式合作伙伴模型。 如果在合作伙伴地址字段中引入了修改,则这些修改会立即提供给嵌入它的所有模型!

注意:

请注意,使用委托继承,字段是继承的,但方法不是。

上一节:使用原型继承复制特征
下一节:添加社交网络功能