1

这更像是一个公共服务公告,而不是一个问题:

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

似乎,除了映射表之外,还将创建 many2many 关系的目标对象的数据库表,如果它不可用的话。稍后读取目标对象定义时,其字段将添加到当时已创建的数据库表中。到目前为止,一切都很好。问题是在创建目标对象数据库表期间省略了 ID 字段。由于 OpenERPs 数据库更新例程似乎没有触及任何“应该存在”的东西,这个字段永远不会被添加到表中。这会导致错误消息,例如告诉您 openerp 无法在表上添加 foreign_key 引用,该引用应该引用目标对象的应该存在的 ID 字段。

TL;DR:如果这些对象在其实际定义之前被引用,则始终为所有对象定义创建存根。否则你会被这个困扰:ProgrammingError: there is no primary key for referenced table ...

4

1 回答 1

0

是的,这是 openerp 的旧版本 v6 和 v6.1 的一个众所周知的问题,现在似乎不再适用于 v7。这个问题是由于你有 ref 的循环依赖而出现的。对象 B 上的对象 A 具有 Ref。对象 C 依赖于对象 A。

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

于 2013-08-20T10:47:39.517 回答