如何编写接受多个子类的超类字段?

时间:2015-07-13 05:11:01

标签: openerp odoo openerp-7 odoo-8 openerp-8

我希望有一个将由子类继承的超类。

让我们说我希望超级motherchild.achild.b继承。

所以我做了这些课程

母亲:

class mother(osv.osv):

    _name           = "mother"

mother()

child.a:

class child_a(osv.osv):

    _name           = "child.a"
    _inherit        = "mother"

child_a()

child.b:

class child_b(osv.osv):

    _name           = "child.b"
    _inherit        = "mother"

child_b()

现在让我们说我有一个与amany2one个连接的课程mother

class a(osv.osv):

    _name           = "a"
    _columns        = {
        'mother' : fields.many2one('mother', 'Mother'),
    }

a()

mother字段是否接受课程child.achild.b。如果是,如何编写create和write方法的代码。如果不是我如何以其他方式实现这一目标? (字段接受多个子类)

1 个答案:

答案 0 :(得分:2)

不,many2one引用mother无法解决class.aclass.b的记录。

class.aclass.b使用的继承方法实际上复制了mother个功能。他们创建了两个新的独立表,mother的副本,包含独立的数据集。

这意味着这些类不能以任何方式互换。 child.a中不存在mother中的记录,反之亦然。

您所描述的内容可以通过chrome.storage实现 - 您可以认为class.x具有mother类"嵌入"在其中,通过特殊的many2one关系。

这样,当您创建新的class.x记录时,也会隐式创建新的mother记录。

但这有一种方法:创建新的mother记录不会创建class.x记录。

核心模块中的delegation inheritanceres.users:用户"嵌入"合作伙伴。创建新用户时,还会为其创建新的合作伙伴。

与合作伙伴的许多关系也将能够引用用户嵌入式合作伙伴。但与用户的许多关系将无法引用非用户的合作伙伴。