我知道如何使用 One2many
关系建立 header->detail
关系。这很简单,但在现实世界中我们需要比这更复杂的事情。
就我而言,我有这些表。
Student Homework Paper Test
--------------------------------------------
id id id id
name subject title score
Student
表有
one2many
到家庭作业
one2many
到纸张
one2many
到测试
还有
家庭作业
有many2one
给学生
论文
有many2one
到学生
测试
有many2one
到学生
产生这些关系
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
访问的 Test
对我来说似乎很奇怪。它还使数据库结构变得复杂,创建不必要的 Many2many
关系。
除了使用 Many2many
关系之外,还有其他方法吗?我感觉如果用那个数据库结构会很丑。
这是我在看待 Odoo 时非常关心的问题,因为它是一个严重依赖模型的框架。您必须首先从正确的型号开始!
最佳答案
当您有一个多对一字段时,您可以创建相关字段以在当前表单中显示它们。
您在作业模型中的案例可以创建与论文的 one2many 字段相关的字段。
paper_ids = fields.One2many(related='student_id.paper_ids', readonly = True)
我假设您的字段名为 paper_ids,当您创建相关字段时,只需始终保持相同的类型,在本例中为 one2many 字段,如果您希望用户能够从该表单编辑该字段,则可以删除只读。相关字段就像计算字段一样,不会存储在数据库中,如果您想将其存储在数据库中,则必须设置 store = True。
希望这对你有帮助
关于python - Odoo模型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46143748/