Odoo 通过中间模型概念理解Many2One与One2Many

我们来深刻地理解一下在 Odoo 18 开发中如何以及为何要使用“中间模型”来满足各种复杂的业务需求。

在 Odoo 中,中间模型是连接另外两个模型的桥梁,它本身也是一个完整的模型。它最经典的应用场景是为多对多(Many2many)关系添加额外的信息。


1. 从标准的 Many2many 关系说起

首先,我们理解一下 Odoo 中最基础的多对多关系。假设我们有两个模型:Course(课程)和 Student(学生)。一个学生可以参加多门课程,一门课程也可以被多个学生参加。

模型定义 (student.py & course.py):

# models/student.py
from odoo import models, fields

class Student(models.Model):
    _name = 'res.partner' # 为方便演示,我们直接继承 partner 模型
    _inherit = 'res.partner'

    # 一个学生可以参加多门课程
    course_ids = fields.Many2many(
        'course.course',              # 关联的模型
        'student_course_rel',         # 数据库中自动创建的中间表的名称
        'student_id',                 # 在中间表中代表本模型记录的字段名
        'course_id',                  # 在中间表中代表关联模型记录的字段名
        string='Enrolled Courses'
    )

# models/course.py
from odoo import models, fields

class Course(models.Model):
    _name = 'course.course'
    _description = 'Course'

    name = fields.Char(string='Course Name', required=True)
    
    # Odoo 会自动处理反向关系,但为了明确,我们也可以定义
    student_ids = fields.Many2many(
        'res.partner',
        'student_course_rel',
        'course_id',
        'student_id',
        string='Students'
    )

视图定义 (course_views.xml):

<record id="course_view_form" model="ir.ui.view">
    <field name="name">course.form</field>
    <field name="model">course.course</field>
    <field name="arch" type="xml">
        <form>
            <sheet>
                <group>
                    <field name="name"/>
                </group>
                <notebook>
                    <page string="Students">
                        <field name="student_ids"/>
                    </page>
                </notebook>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值