我希望有一个将由子类继承的超类。
让我们说我希望超级mother
由child.a
和child.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()
现在让我们说我有一个与a
有many2one
个连接的课程mother
class a(osv.osv):
_name = "a"
_columns = {
'mother' : fields.many2one('mother', 'Mother'),
}
a()
mother
字段是否接受课程child.a
和child.b
。如果是,如何编写create和write方法的代码。如果不是我如何以其他方式实现这一目标? (字段接受多个子类)
答案 0 :(得分:2)
不,many2one
引用mother
无法解决class.a
或class.b
的记录。
class.a
和class.b
使用的继承方法实际上复制了mother
个功能。他们创建了两个新的独立表,mother
的副本,包含独立的数据集。
这意味着这些类不能以任何方式互换。
child.a
中不存在mother
中的记录,反之亦然。
您所描述的内容可以通过chrome.storage
实现 - 您可以认为class.x
具有mother
类"嵌入"在其中,通过特殊的many2one
关系。
这样,当您创建新的class.x
记录时,也会隐式创建新的mother
记录。
但这有一种方法:创建新的mother
记录不会创建class.x
记录。
核心模块中的delegation inheritance为res.users
:用户"嵌入"合作伙伴。创建新用户时,还会为其创建新的合作伙伴。
与合作伙伴的许多关系也将能够引用用户嵌入式合作伙伴。但与用户的许多关系将无法引用非用户的合作伙伴。