Odoo 模型关系

问题描述 投票:0回答:2

我知道如何使用

header->detail
关系建立
One2many
关系。这很简单,但在现实世界中我们需要比这更复杂的东西。

就我而言,我有这些桌子。

Student      Homework      Paper       Test
--------------------------------------------
id           id            id          id
name         subject       title       score

Student
桌子有

  • one2many
    Homework
  • one2many
    Paper
  • one2many
    Test

还有

  • Homework
    many2one
    Student
  • Paper
    many2one
    Student
  • Test
    many2one
    Student

产生这些关系

Student      Homework      Paper       Test
--------------------------------------------
id           id            id          id
name         subject       title       score
homework_ids student_id    student_id  student_id
paper_ids
test_ids

我可以使用

Student
模型创建一个表单,并使用
Homework
小部件从该表单输入
Paper
Test
One2many

但是,如果我想要一个带有

Homework
模型的表格,我首先选择
Student
,然后输入她
Homework
,而且我还想从该表格中查看(或输入)她的其他信息,例如作为
Paper
Test

使用

Many2many
Homework
Paper
之间的
Test
关系只是为了让学生的
Paper
Test
可从
Homework
访问,对我来说似乎很奇怪。它还使数据库结构变得复杂,创建不必要的
Many2many
关系。

除了使用

Many2many
关系之外,还有其他方法吗?我觉得如果用那个的话数据库结构会很丑。

这是我在看待 Odoo 时非常关心的问题,因为它是一个严重依赖模型的框架。您必须首先从正确的型号开始!

python odoo odoo-8
2个回答
1
投票

当您有一个多对一字段时,您可以创建相关字段以在当前表单中显示它们。

您在作业模型中的案例,您可以创建与论文的 one2many 字段相关的字段。

          paper_ids = fields.One2many(related='student_id.paper_ids', readonly = True)

我假设您的字段名为 paper_ids,当您创建相关字段时,只需始终保持相同的类型,在这种情况下为 one2many 字段,如果您希望用户能够从该表单编辑该字段,则可以删除只读。相关字段就像计算字段一样,不会存储在数据库中,如果您想将其存储在数据库中,则必须设置 store = True。

希望这对您有帮助


0
投票

此解决方案适用于我,但用户无法更新。有什么问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.