Openerp 在实际定义之前引用对象(以及由此产生的问题)

Openerp 在实际定义之前引用对象(以及由此产生的问题),openerp,Openerp,这与其说是一个问题,不如说是一个公共服务公告: 我刚刚在OpenERP6.1中实现了一个相当大的数据模型,遇到了一个问题,即一些对象引用是在它们引用的对象之前定义的。一个简单的解决方案是定义这些对象的存根,这些存根只包含“_name”属性,然后用实际的对象定义“覆盖”这些存根。有趣的是,这个问题似乎只出现在多个一对多的关系中。起初,许多关系似乎不受这种行为的影响,尽管它们应该受到影响。事实证明他们仍然是,但不同 看起来,除了映射表之外,还将创建many2many关系的目标对象的数据库表(如果映射

这与其说是一个问题,不如说是一个公共服务公告:

我刚刚在OpenERP6.1中实现了一个相当大的数据模型,遇到了一个问题,即一些对象引用是在它们引用的对象之前定义的。一个简单的解决方案是定义这些对象的存根,这些存根只包含“_name”属性,然后用实际的对象定义“覆盖”这些存根。有趣的是,这个问题似乎只出现在多个一对多的关系中。起初,许多关系似乎不受这种行为的影响,尽管它们应该受到影响。事实证明他们仍然是,但不同

看起来,除了映射表之外,还将创建many2many关系的目标对象的数据库表(如果映射表不可用)。稍后读取目标对象定义时,其字段将添加到已创建的数据库表中。到目前为止,一切顺利。问题在于,在创建目标对象数据库表的过程中,ID字段被省略。由于OpenERPs数据库更新例程似乎不涉及任何“应该存在”的内容,因此该字段永远不会添加到表中。这会导致错误消息,例如,openerp无法在表上添加外键引用,该外键引用应引用目标对象的假定存在ID字段

TL;博士:
始终为所有对象定义创建存根,如果这些对象在其实际定义之前被引用。否则您将被以下问题困扰:编程错误:引用的表没有主键…

是的,这是openerp较旧版本v6和v6.1中的一个众所周知的问题,现在v7中似乎不再存在这一问题。这个问题的产生是因为循环依赖关系,其中对象B上有对象A的引用,对象B上有对象C的引用,对象C上有对象A的依赖


为了避免这种情况,最好重构对象依赖关系,即使在这个问题仍然存在之后,也可以创建一个表的初始声明,其中只包含它的名称,不包含
\u列
。先加载此文件,然后再加载其他对象。

类似于定义前引用了一个表,请在此处粘贴完整的模块代码,以便易于追溯感谢您的努力,但这不是问题。;)我知道问题是什么以及如何避免它。如果你想重现这种行为,自己去看,那么我的帖子里有所有必要的信息。由于谷歌在使用上述错误信息作为搜索字符串时无法提供任何有用的信息,我想我可能会在这里留下一些关于这个问题的有用描述,这样下一个不幸的灵魂可能会立即知道出了什么问题。