Odoo 10 中的多对多关系 (python)

Many2many relation in Odoo 10 (python)

我必须在 windows 中通过 Odoo 10.0 创建学生管理模块。所以我想知道如何在 Odoo(不是 Openerp)中建立 "many2many" 关系。我在网上搜索了很多解决方案,但我不太了解它们: enter image description here

例如,下面有 2 个 类(学生和课程)及其属性:

 class Student(models.Model):
      _name = "management.student"
      IdStudent = fields.Integer() #primary key
      Name = fields.Char()
      Gender = fields.Char()
      Address = fields.Char()

 class Course(models.Model):
      _name = "management.course"
      IdCourse = fields.Integer() #primary key
      course = fields.Char()
      credit = fields.Integer()
      professor = fields.Char()

非常感谢您的帮助!

Odoo 中的 Many2many 关系是最好的描述,因为一个模型的许多记录可以链接到另一个模型的许多记录。使用您的示例,很多 类 可以有很多学生,而学生可以有很多 类,因此有很多。相对于 many2one,例如苹果只能有一棵树或 one2many 一棵树可以有很多苹果。

要为课程和学生定义多对多关系,您可以像这样在课程上创建一个字段。 (摘自docs

attendee_ids = fields.Many2many('management.student', string="Attendees")

在这种情况下,因为您没有指定可选参数 column1,column2 Odoo 将创建一个新关系 table 链接两个模型。 table 将具有这样的名称。

management_course_management_student_rel

但是,您可以为关系 table 指定自己的 table 名称和列。

attendee_ids = fields.Many2many('management.student',relation='your_table_name', column1='course_id',column2='student_id', string="Attendees")

这将产生一个名为 your_table_name 的 table,其中包含两列 course_idstudent_id

要确定课程中有哪些学生,Odoo 会执行查询

SELECT student_id from your_table_name where course_id = x

相反,查找学生正在修读的课程。