我正在开发一个名为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
创建新记录?
提前致谢。
答案 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.template
和product.product
模型代码