这更像是一个公共服务公告,而不是一个问题:
我刚刚在 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 ...