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

server/2024/10/16 0:25:25/

好的,让我们换一个更容易理解的例子,涉及到图书和作者之间的关系。假设我们有两个模型:library.book(图书)和 library.author(作者)。每本图书可以有一个作者,因此我们可以使用 Many2one 关联来表示这种关系。

1. 定义模型

首先,我们定义 library.author 模型,表示作者的信息:

python">from odoo import models, fieldsclass LibraryAuthor(models.Model):_name = 'library.author'_description = 'Author'name = fields.Char(string="Author Name")

接下来,我们定义 library.book 模型,并在其中添加一个 Many2one 字段,关联到 library.author 模型:

python">class LibraryBook(models.Model):_name = 'library.book'_description = 'Book'title = fields.Char(string="Book Title")author_id = fields.Many2one('library.author', string="Author")

在这里,author_id 是一个 Many2one 字段,用于将每本书与其作者关联。

2. 使用 related 字段访问作者的字段

如果我们希望在 library.book 模型中直接访问作者的名称(例如,我们想要在书籍记录中显示作者的姓名),可以通过定义一个 related 字段来实现:

python">class LibraryBook(models.Model):_name = 'library.book'_description = 'Book'title = fields.Char(string="Book Title")author_id = fields.Many2one('library.author', string="Author")author_name = fields.Char(related='author_id.name', string="Author Name", store=True)

在这个例子中,author_name 是一个 related 字段,它通过 author_id 访问 library.author 模型中的 name 字段。每当 author_id 发生变化时,author_name 字段会自动更新。

3. 视图中使用

接下来,我们可以在 Odoo 的视图中使用这些字段。例如,在图书的表单视图中显示书名和作者姓名:

<record id="view_library_book_form" model="ir.ui.view"><field name="name">library.book.form</field><field name="model">library.book</field><field name="arch" type="xml"><form string="Book"><sheet><group><field name="title"/><field name="author_id"/><field name="author_name" readonly="1"/></group></sheet></form></field>
</record>

在这个例子中,我们在图书的表单中添加了 titleauthor_idauthor_name 字段,以便用户可以输入书名并选择作者,同时也可以看到作者的姓名。

4. 总结

通过这个例子,我们展示了如何在 library.book 模型中使用 Many2one 字段将每本书与一个作者关联,并通过 related 字段直接访问作者的名称。这种方式使得图书记录的展示更加清晰,同时也能减少重复查询数据的需要。

5. 模块依赖

为了确保 library_management 模块能够访问 library 模块中的模型,你需要在 library_management 模块的 manifest.py 文件中添加对 library 模块的依赖:

# library_management/__manifest__.py{'name': 'Library Management','version': '1.0','depends': ['library'],  # 添加对 library 模块的依赖'data': ['views/library_book_views.xml',],
}

http://www.ppmy.cn/server/124862.html

相关文章

「Qt Widget中文示例指南」如何实现一个平板电脑示例?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 当您在平板电脑上使用…

Linux-TCP重传

问题描述&#xff1a; 应用系统进行切换&#xff0c;包含业务流量切换&#xff08;即TongWeb主备切换&#xff09;和MYSQL数据库主备切换。首先进行流量切换&#xff0c;然后进行数据库主备切换。切换后发现备机TongWeb上有两批次慢请求&#xff0c;第一批慢请求响应时间在133…

9.26-9.29学习

一.项目结构的建立 5个微服务模块 新建好各个模块后&#xff0c;在项目pom下引入各模块。各pom文件指定springboot版本2.1.8.RELEASE .gitignore #表示任意路径下的xx文件 **/mvnw **/mvnw.cmd**/.mvn **/target/.idea**/.gitignore 二.数据库初始化 一个微服务模块对应一个数…

Hi3536AV100 22AP20/SS626V100 芯片及开发板

22AP20 是针对多路高清/超高清&#xff08;1080p/4M/5M/4K&#xff09;智能 NVR 产品应用开发的新一代专业高端 SoC 芯 片。22AP20 集成了 ARM Cortex-A55 八核处理器和性能强大的图像分析工具处理器&#xff0c;支持多种智能算法 应用。22AP20 支持 24 路 1080p 多协议解码及 …

2024年配置YOLOX运行环境+windows+pycharm24.0.1+GPU

1.配置时间2024/9/25 2.Anaconda-python版本3.7&#xff0c;yolox版本0.2.0 YOLOX网址: https://github.com/Megvii-BaseDetection/YOLOX 本人下载的这个版本 1.创建虚拟环境 conda create -n yolox37 python37 激活 conda activate yolox37 2.安装Pytorch cuda等&…

正向代理与反向代理:原理、区别以及应用(Nginx 和 Tomcat)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. 实现原理正向代理工作流程&#xff1a; 反向代理工作流程&#xff1a; 区别 2. 使用案例Nginx作为正向代理Nginx作为反向代理Tomcat作为反向代理 3. 适用场景…

8月面试总结

面试总结 前言一、公司甲&#xff08;一&#xff09;技术面&#xff08;二&#xff09;HR面 二、公司乙三、公司丙&#xff08;一&#xff09;技术面HR面 四、公司丁五、公司戊六、公司己七、公司庚八、公司辛九、公司壬总结 前言 提示&#xff1a;这里可以添加本文要记录的大…

网络安全:保护您的数字世界

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…