当前位置: 首页 > news >正文

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

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

1. 场景介绍

假设我们有两个模块:

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

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

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

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

# school/models/school.pyfrom odoo import models, fieldsclass 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.pyfrom odoo import models, fieldsclass 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.lryc.cn/news/449604.html

相关文章:

  • LLaMA 3 和 OpenAI有哪些相同点和不同点?
  • Spring 事务管理及失效总结
  • 全局思维下的联合创新:华为携手ISV伙伴助推银行核心平稳升级
  • 深度估计任务中的有监督和无监督训练
  • 扩散模型DDPM代码实践
  • 关于GPIO输入模式的配置选择
  • 【Kubernetes】日志平台EFK+Logstash+Kafka【实战】
  • 今天推荐一个文档管理系统 Dorisoy.Pan
  • 【RocketMQ】消费失败重试与死信消息
  • 注册安全分析报告:闪送
  • SpringCloud入门
  • js替换css主题变量并切换iconfont文件
  • UI设计师面试整理-设计趋势和行业理解
  • Java零工市场小程序如何改变自由职业者生活
  • android11 自动授权访问sdcard
  • 优青博导团队/免费指导/数据分析//论文润色/组学技术服务 、表观组分析、互作组分析、遗传转化实验、生物医学
  • Mybatis 学习之 分页实现
  • Spring Boot文件上传
  • 基于Springboot+Vue的高校体育运动会比赛系统(含源码+数据库)
  • 【JavaEE】——内存可见性问题
  • YOLO训练参数设置解析
  • 基于OpenCV的实时年龄与性别识别(支持CPU和GPU)
  • 理解Js执行上下文
  • 微信小程序 蓝牙通讯
  • java后端项目技术记录
  • PostgreSQL数据库与PostGIS在Windows中的部署与运行
  • 高级算法设计与分析 学习笔记10 平摊分析
  • 从“纸面算力”到“好用算力”,超聚变打通AI+“最后一公里”
  • 【有啥问啥】具身智能(Embodied AI):人工智能的新前沿
  • 11-pg内核之锁管理器(六)死锁检测