【问题标题】:Odoo model relationshipOdoo 模型关系
【发布时间】:2017-09-22 09:34:11
【问题描述】:

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

就我而言,我有这些表。

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

Student 表有

  • one2manyHomework
  • one2manyPaper
  • one2manyTest

还有

  • Homeworkmany2oneStudent
  • Papermany2oneStudent
  • Testmany2oneStudent

导致这些关系

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 模型创建一个表单,并使用One2many 小部件从该表单输入HomeworkPaperTest

但是,如果我想要一个带有Homework 模型的表单,我首先选择一个Student,然后输入她的Homework,但我也想从那个表单中看到(或输入)她的另一个PaperTest等信息?

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

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

我对 Odoo 非常关注,因为它是一个严重依赖模型的框架。您必须首先从正确的模型开始!

【问题讨论】:

    标签: python openerp odoo-8


    【解决方案1】:

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

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

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

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

    希望对你有帮助

    【讨论】:

    • 你的意思是在作业模型中添加这个相关字段吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    相关资源
    最近更新 更多