Odoo中对象创建的完整性错误

时间:2014-12-15 15:53:15

标签: openerp

我正在开发一个名为implementation.project的新模型;它继承自project.project。这是类声明:

class implementation_project(osv.Model):
    _name = 'implementation.project'
    _inherit = 'project.project'

某些字段(列)会添加到此类(模型或其他)中。原始模型(project.project)有一个名为tasks one2many 字段。当我尝试创建新的implementation.project记录时,神秘的Odoo会引发此错误:

IntegrityError: insert or update on table "project_task_type_rel" violates foreign key constraint "project_task_type_rel_project_id_fkey"
DETAIL:  Key (project_id)=(6) is not present in table "project_project".

显然!!!!它必须存在project.project记录才能创建从他那里继承的东西!我想Odoo(根据一些人,一个很好的开发平台)有能力知道如何继续这种情况......或者不是吗?

那么,如何从implementation.project创建新记录?

提前致谢。

1 个答案:

答案 0 :(得分:0)

在您的货币示例中,字段tasks one2many project.task模型的字段project_id

'tasks': fields.one2many('project.task', 'project_id', "Task Activities"),

,这意味着Odoo希望project.task模型具有引用project_id模型的 many2one 字段implementation.project,但project.task模型仍然具有字段project_id作为project.project模型的外键:

'project_id': fields.many2one('project.project', 'Project', ...)

,但您的implementation.project是全新模型(和数据库表)。

可能inheritance by delegation更适合您的需求吗?

另请查看inheritance doc

在这种情况下,您的implementation.project模型将如下所示:

class implementation_project(osv.Model):
    _name = 'implementation.project'
    _inherits = {'project.project': 'project_id'}

    _columns = {
        'project_id': fields.many2one('project.project', 'Project'),
    }

这将允许在您自己的模型上使用project.project模型的所有字段,而不进行任何更改。

例如,您可以查看product.templateproduct.product模型代码