我知道如何使用
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 时非常关心的问题,因为它是一个严重依赖模型的框架。您必须首先从正确的型号开始!
当您有一个多对一字段时,您可以创建相关字段以在当前表单中显示它们。
您在作业模型中的案例,您可以创建与论文的 one2many 字段相关的字段。
paper_ids = fields.One2many(related='student_id.paper_ids', readonly = True)
我假设您的字段名为 paper_ids,当您创建相关字段时,只需始终保持相同的类型,在这种情况下为 one2many 字段,如果您希望用户能够从该表单编辑该字段,则可以删除只读。相关字段就像计算字段一样,不会存储在数据库中,如果您想将其存储在数据库中,则必须设置 store = True。
希望这对您有帮助
此解决方案适用于我,但用户无法更新。有什么问题吗?