📜  写 many2many odoo (1)

📅  最后修改于: 2023-12-03 15:36:48.961000             🧑  作者: Mango

编写 Many2many 关系 in Odoo

在Odoo中,Many2many关系是两个数据模型之间的一种多对多关系。 Many2many关系表示两个模型之间的多对多关系,即每一个记录可以引用另一个记录。

在这篇文章中,我们将探讨如何通过编写Many2many关系来扩展Odoo模型。

步骤1:创建数据模型

我们将从创建两个数据模型开始。 我们创建一个学生模型和一个班级模型,一个学生可以属于多个班级,而一个班级也可以包含多个学生。

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 模型之间建立多对多的关系。

步骤2:创建Many2many关系表

我们需要在数据库中生成一个Many2many关系表,以便存储记录之间的关系。需要在 student_class_rel 表中添加两个字段: student_idclass_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 关系字段来引用 StudentClass 模型,并在 student_class_rel 表中存储多对多关系。

步骤3:更新模型视图

最后一步是在视图中更新模型,以使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中重要且强大的功能,可用于将不同的记录彼此关联。