One2many(一对多)关联场景中,如何从模型(一)关联到模型(多)的某个字段

news2024/9/30 1:19:16

好的,我们用一个更通俗的例子来解释不同模块之间的模型关联,场景是“学校和学生”的例子。

1. 场景介绍

假设我们有两个模块:

  • 学校模块 (school):用于管理学校信息。
  • 学生模块 (student):用于管理学生信息。

每个学校可以有多个学生,而每个学生只属于一个学校,这就是一个典型的 Many2oneOne2many 的关联场景。

2. 定义学校模型(school 模块)

school 模块中,我们定义了 School 模型,用来表示每个学校的信息。

# school/models/school.py

from odoo import models, fields

class School(models.Model):
    _name = 'school.school'
    _description = 'School'

    name = fields.Char(string="School Name")
    student_ids = fields.One2many('student.student', 'school_id', string="Students")
  • name 字段是学校的名称。
  • student_ids 是一个 One2many 字段,表示该学校下所有的学生,它通过 student.student 模型中的 school_id 字段来关联。

3. 定义学生模型(student 模块)

接下来,在 student 模块中定义 Student 模型,用来表示每个学生的信息,并通过 Many2one 关联到 School 模型。

# student/models/student.py

from odoo import models, fields

class Student(models.Model):
    _name = 'student.student'
    _description = 'Student'

    name = fields.Char(string="Student Name")
    school_id = fields.Many2one('school.school', string="School")
  • name 字段是学生的姓名。
  • school_id 是一个 Many2one 字段,用来关联到 school.school 模型,这表示每个学生属于某个学校。

4. 模块之间的依赖

为了让 student 模块能够使用 school 模块中的 School 模型,你需要在 student 模块的 __manifest__.py 文件中添加对 school 模块的依赖:

# student/__manifest__.py

{
    'name': 'Student Management',
    'version': '1.0',
    'depends': ['school'],  # 添加对 school 模块的依赖
    'data': [
        'views/student_views.xml',
    ],
}

这告诉 Odoo 系统,student 模块依赖于 school 模块,所以在安装 student 模块之前,必须先安装 school 模块。

5. 视图展示

最后,你可以在 student 模块中定义一个表单视图,用来输入和查看学生信息,包括学生所属的学校。

<!-- student/views/student_views.xml -->

<record id="view_student_form" model="ir.ui.view">
    <field name="name">student.form</field>
    <field name="model">student.student</field>
    <field name="arch" type="xml">
        <form string="Student">
            <sheet>
                <group>
                    <field name="name"/>
                    <field name="school_id"/>
                </group>
            </sheet>
        </form>
    </field>
</record>

在这个视图中,用户可以选择学生所属的学校。

6. 总结

在这个例子中,我们展示了如何在不同模块之间建立模型的关联:

  • 学校模块 (school) 定义了 School 模型,包含一个 One2many 字段 student_ids,用于表示学校下的多个学生。
  • 学生模块 (student) 定义了 Student 模型,并使用 Many2one 字段 school_id 关联到 School 模型,表示每个学生属于某个学校。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2178309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 5.8 Performance Schema 配置详解

MySQL 5.8 Performance Schema 配置详解 MySQL 的 Performance Schema 是一个用于监控和优化数据库性能的子系统&#xff0c;专门用来收集 MySQL 服务器的运行情况和性能指标。它的核心原理是通过“生产者”和“消费者”的概念来采集和存储数据库中的事件信息&#xff0c;帮助…

第十四周周报:Transformer for CV

目录 摘要 Abstract 一、Swin Transformer 1.1 输入 1.2 Patch Partition 1.3 Linear Embedding 1.4 Patch Merging 1.5 Swin Transformer Block 1.6 代码 二、MLP-Mixer 2.1 网络模型整体结构 2.2 Mixer Layer 2.3 MLP 总结 摘要 本篇博客介绍了采用类似于卷积…

MySQL篇(leetcode刷题100(查询))(二)(持续更新迭代)

目录 一、普通查询 1. 可回收且低脂的产品&#xff08;简单&#xff09; 1.1. 题目描述 1.2. 解题思路 2. 寻找用户推荐人&#xff08;简单&#xff09; 2.1. 题目描述 2.2. 解题思路 3. 大的国家&#xff08;简单&#xff09; 3.1. 题目描述 3.2. 解题思路 4. 文章浏…

【JavaEE初阶】文件IO(下)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 文件内容操作 打开 关闭文件 文件描述符表 字节流 读文件 写文件 字符流 读文件 写文件 Scanner 示例一:通过scanner读取文件中的数字 示例二:扫描指定⽬录 示例三:实…

JUC第23讲:Java线程池最佳实践

JUC第23讲&#xff1a;Java线程池最佳实践 本文是JUC第23讲&#xff0c;先介绍为什么使用线程池&#xff1b;然后结合实际业务&#xff0c;讲解如何使用线程池&#xff0c;以及使用过程中踩过的坑。 1、Java线程池概述 1.1、什么是线程池&#xff1f; 线程池是一种用于管理和…

彩虹易支付最新版源码及安装教程(修复BUG+新增加订单投诉功能)

该系统也没版本号&#xff0c;此版本目前是比较新的版本&#xff0c;增加了订单投诉功能&#xff0c;和一个好看的二次元模板。 此版本是全开源版&#xff0c;无一处加密文件,系统默认是安装后是打不开的&#xff0c; 本站特别修复了BUG文件&#xff0c;在PHP7.4环境下也没问…

数据结构和算法之树形结构(4)

文章出处&#xff1a;数据结构和算法之树形结构(4) 关注码农爱刷题&#xff0c;看更多技术文章&#xff01;&#xff01;&#xff01; 六、红黑树(接前篇) 红黑树是为了弥补AVL树在大规模频繁增删节点场景下性能不理想而设计出来的一种平衡二叉查找树。红黑树不是一种严…

cuda程序编译流程

cuda程序编译流程 本文以cuda example的matrixMul矩阵乘法为例说明cuda程序的编译流程。 1. 源代码 .cu 文件 在matrixMul示例中&#xff0c;源代码文件 matrixMul.cu 是典型的CUDA程序&#xff0c;包含以下部分&#xff1a; 流程图 主机代码&#xff08;Host Code&#xf…

Vivado - JTAG to AXI Master (GPIO、IIC、HLS_IP)

目录 1. 简介 2. JTAG to AXI Master 2.1 添加 IP Core 2.2 基本TCL命令 2.2.1 复位 JTAG-to-AXI Master 2.2.2 创建并运行写入传输事务 2.2.3 创建并运行读取传输事务 2.2.4 命令列表 2.3 帮助信息 2.4 创建TCL读写程序 2.4.1 Read proc 2.4.2 Write proc 2.4.3 …

嵌入式学习--LinuxDay03

嵌入式学习--LinuxDay03 shell脚本 1.1功能性语句 1.1.1说明性语句 1.1.2功能性语句 1&#xff09;read 2&#xff09;expr 3) test a)字符串 b)整数的测试 c)文件属性的测试 1.2结构性语句 1.2.1if语句 1.2.2case语句 1.2.3for循环 1.2.4while循环 1.2.5循环控制语句 shell脚本…

心觉:运用吸引力法则和开发潜意识的核心中的核心是什么?

吸引力法则的核心在于 思想的力量 和 频率的匹配。你所思考和感受的会吸引与你频率相匹配的事物和经历到你的生活中。具体来说&#xff1a; 明确意图和目标&#xff1a;清晰地知道你想要什么&#xff0c;并且用详细的方式描述它。这可以是通过写下目标、制作愿景板&#xff08;…

rocky9.2实现lvs(DR模式)+keepalived实现高可用的案例详解(双机热备、lvs负载均衡、对后端服务器健康检查)

文章目录 [TOC] 前言lvs(DR模式)的工作原理环境实现过程一、lvs1配置二、lvs2配置web1配置web2配置结果验证 总结 前言 想必能搜到这个也不是来看知识点的&#xff0c;这里就简单描述一下lvs的dr模式的工作原理&#xff0c;其他的就不过多阐述了,直接看操作步骤就好&#xff0…

rabbitMQ 简单使用

安装 rabbitMQ 下载地址&#xff1a;rabbitmq-3.12.0 安装 windows rabbitMQ 需要的命令 进入 rabbitMQ 的 sbin 目录后 cmd &#xff08;需要管理员权限&#xff09; rabbitmq-plugins.bat enable rabbitmq_management随后重启 rabbitMQ #关闭服务 net stop rabbitmq #开…

【机器学习(八)】分类和回归任务-因子分解机(Factorization Machines,FM)算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09; FM表达式&#xff08;二&#xff09;时间复杂度&#xff08;三&#xff09;回归和分类 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、FM分类任务实现对比&#xff08;一&…

YOLOV8在清微智能芯片的部署与实现(一)

现在以YOLOV8 为例&#xff0c;进行演示 文章目录 1. YOLOV8浮点模型训练1.1 准备数据集1.1.1 下载业务数据集1.1.2 下载开源数据集1.1.3 自定义数据集1.1.4 将数据转换为yolo训练数据格式 1.2 yolov8项目准备1.3 训练模型 2. YOLOV8浮点模型推理2.1 模型推理2.2 模型val.py评…

纯CSS实现有趣emoji切换开关

这是一个纯CSS创建的动画切换开关&#xff0c;它不仅能够在视觉上吸引用户&#xff0c;还能通过交互提供即时反馈。本文将解析源码的核心实现逻辑&#xff0c;这个项目的核心是使用CSS变量、3D变换和过渡效果来实现一个动态的、响应式的用户界面元素。 关键技术点 CSS变量&am…

[Python学习日记-31] Python 中的函数

[Python学习日记-31] Python 中的函数 简介 语法定义 函数的参数 简介 引子&#xff1a; 你是某公司的一个高级程序员&#xff0c;现在老板让你写一个监控程序&#xff0c;需要24小时全年无休的监控公司网站服务器的系统状况&#xff0c;当 CPU、Memory、Disk 等指标的使用…

基于SpringBoot+Vue+MySQL的体育商城系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网的飞速发展&#xff0c;电子商务已成为人们日常生活中不可或缺的一部分。体育用品市场作为其中的一个重要分支&#xff0c;也逐渐向线上转移。基于SpringBootVueMySQL的体育商城系统应运而生&#xff0c;旨在通过构建…

如何使用ssm实现基于Java的高校物业工程报修系统

TOC ssm736基于Java的高校物业工程报修系统jsp 绪论 1.1研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务&#xff0c;逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速&#xff0c;使用起来非常简单容易&#xff0c;用户甚至不用掌握相关的专…

一行命令将Cmder添加到系统右键菜单中----配置环境

第一步&#xff0c;去官网下载一个简版的文件 ** 第二步&#xff0c;将下载的文件解压后如图&#xff0c;找到Cmder.exe右键以管理员身份运行 第三步&#xff0c;在窗口输入cmder /register all然后回车 第四步&#xff0c;OK!不管在哪里都可以使用了&#xff0c;直接右键即可