2013-04-18 27 views
1

这是一个多问题,公共服务公告:引用对象(并由此产生的问题)

我只是在OpenERP的6.1执行一个相当大的数据模型和有问题一些对象引用是在它们引用的对象之前定义的。一个简单的解决方案是定义这些对象的存根,只包含“_name”属性,并用这些存根以后的实际对象定义“覆盖”这些存根。有趣的是,这个问题似乎只与许多二元和二元关系有关。起初许多关系似乎不受这种行为的影响,尽管他们应该这样做。原来他们仍然是,但不同。

看来,除了映射表之外,还会创建many2many关系的目标对象的数据库表(如果它尚不可用)。当稍后读取目标对象定义时,其字段将被添加到当时已经创建的数据库表中。到现在为止还挺好。问题在于,在创建目标对象数据库表时,ID字段被省略。由于OpenERPs数据库更新例程似乎没有触及任何“应该存在”的东西,所以这个字段永远不会被添加到表中。这会产生错误信息,告诉你openerp无法在表中添加foreign_key引用,该引用应该引用假定为目标对象的ID字段。

TL; DR: 如果这些对象在实际定义之前被引用,请始终为所有对象定义创建存根。否则你会被这个闹鬼:ProgrammingError:有是引用的表没有主键...

+0

像你这样的东西引用一个表之前定义粘贴你的完整模块代码在这里,这将很容易追溯 – senthilnathang

+0

谢谢你的努力,但这不是一个问题。 ;)我知道问题是什么以及如何避免它。如果你想重现行为以亲眼看到它,那么所有必要的信息都可以在我的文章中找到。由于google在使用上述错误信息作为搜索字符串时无法提供任何有用信息,因此我想我可能会在此处留下一些有用的问题描述,以便下一个不幸的灵魂可能立即知道错误。 – asdfsdfsdfsdfsd3232

回答

0

是的,这是OpenERP的的旧版本V6和V6.1,它现在似乎不再是一个众所周知的问题与v7。由于循环依赖关系,因此您需要参考此问题。对象B上的对象A有Ref。对象C依赖于对象A.

为了避免出现这种情况,最好重构对象依赖关系,即使在该问题仍然存在之后,您可以创建只包含它的名称的表的初始声明,并且NO _column 。让这个文件首先被加载,然后你的其他对象可以跟随。