Odoo 10(python)中的Many2many关系

Lee*_*Dat 3 python openerp odoo-10

我必须在Windows中通过Odoo 10.0创建一个STudent Management模块.所以我想知道如何在Odoo(而不是Openerp)中建立一个"many2many"关系.我在互联网上搜索了很多解决方案,但我不清楚它们: 在这里输入图像描述

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

 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()
Run Code Online (Sandbox Code Playgroud)

非常感谢你的帮助 !

Phi*_*ack 6

Odoo中的Many2many关系最好描述,因为一个模型的许多记录可以链接到另一个模型的许多记录.要使用你的例子,许多班级可以有很多学生,学生可以有很多班级,因此很多.像许多人一样,如苹果只能只有一棵树或者一只一棵树,一棵树可以有很多苹果.

要为课程和学生定义many2many关系,您可以像这样在课程上创建一个字段.(取自文档)

attendee_ids = fields.Many2many('management.student', string="Attendees")
Run Code Online (Sandbox Code Playgroud)

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

management_course_management_student_rel
Run Code Online (Sandbox Code Playgroud)

但是,您可以为关系表指定自己的表名和列.

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

这会产生一种叫表your_table_name有两列course_idstudent_id

要确定学生在课程中的内容,Odoo将执行查询

SELECT student_id from your_table_name where course_id = x
Run Code Online (Sandbox Code Playgroud)

与找到学生正在学习的课程相反.