📅  最后修改于: 2023-12-03 15:36:48.961000             🧑  作者: Mango
在Odoo中,Many2many关系是两个数据模型之间的一种多对多关系。 Many2many关系表示两个模型之间的多对多关系,即每一个记录可以引用另一个记录。
在这篇文章中,我们将探讨如何通过编写Many2many关系来扩展Odoo模型。
我们将从创建两个数据模型开始。 我们创建一个学生模型和一个班级模型,一个学生可以属于多个班级,而一个班级也可以包含多个学生。
class Student(models.Model):
_name = 'school.student'
name = fields.Char()
age = fields.Integer()
class_ids = fields.Many2many('school.class', 'student_class_rel', 'student_id', 'class_id', string="Classes")
class Class(models.Model):
_name = 'school.class'
name = fields.Char()
student_ids = fields.Many2many('school.student', 'student_class_rel', 'class_id', 'student_id', string="Students")
在上面的代码中,我们设置了 Many2many
关系,以便在 Student
模型和 Class
模型之间建立多对多的关系。
我们需要在数据库中生成一个Many2many关系表,以便存储记录之间的关系。需要在 student_class_rel
表中添加两个字段: student_id
和 class_id
。
class Student(models.Model):
_name = 'school.student'
name = fields.Char()
age = fields.Integer()
class_ids = fields.Many2many('school.class', 'student_class_rel', 'student_id', 'class_id', string="Classes")
class Class(models.Model):
_name = 'school.class'
name = fields.Char()
student_ids = fields.Many2many('school.student', 'student_class_rel', 'class_id', 'student_id', string="Students")
class StudentClassRel(models.Model):
_name = 'student.class.rel'
student_id = fields.Many2one('school.student', string="Student")
class_id = fields.Many2one('school.class', string="Class")
在这段代码中,我们创建了一个名为 StudentClassRel
的新模型。 它具有 Many2one
关系字段来引用 Student
和 Class
模型,并在 student_class_rel
表中存储多对多关系。
最后一步是在视图中更新模型,以使Many2many关系可见。 我们需要添加一个班级选择器,以便在学生表单中添加多个班级。同样需要添加一个学生选择器,以便在班级表单中添加多个学生。
<record id="student_form_view" model="ir.ui.view">
<field name="name">school.student.form</field>
<field name="model">school.student</field>
<field name="arch" type="xml">
<form string="Student">
<sheet>
<group>
<field name="name"/>
<field name="age"/>
<field name="class_ids" widget="many2many_tags" options="{'create_edit': False}"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="class_form_view" model="ir.ui.view">
<field name="name">school.class.form</field>
<field name="model">school.class</field>
<field name="arch" type="xml">
<form string="Class">
<sheet>
<group>
<field name="name"/>
<field name="student_ids" widget="many2many_tags" options="{'create_edit': False}"/>
</group>
</sheet>
</form>
</field>
</record>
我们为学生和班级创建两个表单视图。 在学生表单中,我们添加了一个名称、年龄和多选班级选择器。 在班级表单中,我们添加了一个名称和一个多选学生选择器。 该选择器使用 many2many_tags
部件,它将显示一个可以缩放的标签列表,并在单击标签时自动打开记录。
经过以上步骤,我们成功地创建了一个多对多关系。在学生表单中,我们可以为学生添加多个班级,而在班级表单中,我们可以添加多名学生。Many2many关系是Odoo中重要且强大的功能,可用于将不同的记录彼此关联。