这更像是一个公共服务公告,而不是一个问题:
我刚刚在OpenERP 6.1中实现了一个非常大的数据模型,并且遇到了一些问题,即在它们引用的对象之前定义了一些对象引用。一个简单的解决方案是定义这些对象的存根,其中只包含“_name”属性,并在稍后使用实际对象定义“覆盖”这些存根。有趣的是,这个问题似乎只出现在许多二人和一个二人关系中。起初很多2个关系似乎不受这种行为的影响,即使他们应该这样做。原来他们仍然是,但不同。
似乎,除了映射表之外,还将创建many2many关系的目标对象的数据库表(如果它尚不可用)。稍后读取目标对象定义时,其字段将添加到当时已创建的数据库表中。到现在为止还挺好。问题是在创建目标对象数据库表期间,省略了ID字段。由于OpenERP数据库更新例程似乎没有触及任何“应该存在”的东西,因此该字段永远不会被添加到表中。这会导致错误消息,告诉您,例如openerp无法在表上添加foreign_key引用,该引用应该引用目标对象的ID字段。
TL; DR: 如果在实际定义之前引用这些对象,则始终为所有对象定义创建存根。否则你会被这个困扰: ProgrammingError:引用表没有主键...
答案 0 :(得分:0)
是的,这是openerp的旧版本v6和v6.1的一个众所周知的问题,现在看来不再是v7了。出现这个问题是因为你有ref的循环依赖。具有Ref的对象B上的对象A的对象。对象C的依赖于对象A.
要避免这种情况,最好重构对象依赖项,即使在该问题仍然存在之后,您也可以创建仅包含其名称的表的初始声明,并且不_column
。首先加载此文件,之后可以跟随其他对象。