odoo17模型之间的关系

many2one

在实践中,many2one 可以看作是表单视图中的下拉列表。

一个属性可以有一种类型,但可以将相同的类型分配给多个属性。many2one概念支持这一点。

many2one 是指向另一个对象的简单链接。例如,为了 res.partner 在我们的测试模型中定义一个链接,我们可以写:

partner_id = fields.Many2one("res.partner", string="Partner")

按照惯例,many2one 字段具有 _id 后缀。然后,可以通过以下方法轻松访问合作伙伴中的数据:

print(my_test_object.partner_id.name)

 参考

foreign keys 外键

many2many

一个属性可以有多个标记,一个标记可以分配给许多属性。many2many 概念支持这一点。


many2many 是双向多重关系:一侧的任何记录都可以与另一侧的任意数量的记录相关联。例如,为了在测试模型上定义指向模型的 account.tax 链接,我们可以编写:

tax_ids = fields.Many2many("account.tax", string="Taxes")


按照惯例,many2many 字段具有 _ids 后缀。这意味着可以将几种税种添加到我们的测试模型中。它的行为为记录列表,这意味着访问数据必须在循环中完成:

for tax in my_test_object.tax_ids:print(tax.name)


记录列表称为记录集,即有序的记录集合。它支持对集合的标准 Python 操作,例如 len() 和 iter() ,以及额外的集合操作,例如 recs1 | recs2 。

one2many

many2one的概念可指同一属性可以有多个选项。 当有给定属性的报价列表,我们将使用 one2many 概念。


one2many 与 many2one 正好相反。例如,我们在测试模型上定义了一个指向 res.partner 模型的链接,这要归功于字段 partner_id 。我们可以定义反比关系,即链接到我们的合作伙伴的测试模型列表:

test_ids = fields.One2many("test_model", "partner_id", string="Tests")


第一个参数称为  comodel 协同模型第二个参数是我们要反转的字段。


通常,one2many 字段具有 _ids 后缀。它们表现为记录列表,这意味着访问数据必须在循环中完成:

for test in partner.test_ids:print(test.name)

 危险


由于 One2many 是虚拟关系,因此必须在comodel协同模型中定义一个 Many2one 字段。

注意

首先,我们不需要所有模型的操作或菜单。某些模型只能通过另一个模型访问。在我们的练习中就是这种情况:报价总是通过属性访问。
其次,尽管该 property_id 字段是必填字段,但我们没有将其包含在视图中。Odoo如何知道我们的报价与哪个属性相关联?这就是使用Odoo框架的魔力之一:有时事物是隐式定义的。当我们通过 one2many 字段创建记录时,为了方便起见,会自动填充相应的 many2one。

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

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

相关文章

数据包的跨层封装

首先,我们先简单地分析一下数据包的组成结构: 如图 数据包简略地分为以下几层: 二层:封装MAC地址(数据链路层) 三层:封装IP地址 — 表明源IP和目标IP,主要用于路由器之间的信息转发…

Windows图形界面(GUI)-DLG-C/C++ - 树形视图(TreeView)

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​​​​链接点击跳转博客主页 目录 树形视图(TreeView) 使用场景 消息处理 示例代码 树形视图(TreeView) 使用场景 文件浏览器:显示文件和目录的层次结构。设置菜单:在配置界面中显示嵌套…

【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)

​​​​​​​ 一、引言 pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理&#x…

【Pytorch笔记】张量

torch.Tensor() 是 PyTorch 库中用于创建张量的一个函数。在 PyTorch 中,张量是多维数组,它们可以存储在 CPU 或 GPU 上,并且支持自动求导,这使得它们非常适合进行深度学习和科学计算。 张量可以在Python list形式下通过 torch.T…

挖矿宝藏之硬盘分区

目录 一、硬盘分区的相关知识 二、主分区、活动分区、扩展分区、逻辑盘和盘符 三、硬盘分区原因 1.减少硬盘空间的浪费 2.便于文件的分类管理 3.有利于病毒的防治 四、硬盘分区的原则 1.方便性 2.实用性 3.安全性 五、利用Diskpart进行分区 1.命令行工具Diskpart …

ARM体系结构和接口技术(五)封装RCC和GPIO库

文章目录 一、RCC(一)思路1. 找到时钟基地址2. 找到总线的地址偏移(1)AHB4总线(2)定义不同GPIO组的使能宏函数(3)APB1总线(4)定义使能宏函数 二、GPIO&#x…

捷配笔记-混合信号PCB布局设计的基本准则是什么?

混合信号PCB设计需要对模拟和数字电路有基本的了解,以最大限度地减少(如果不能防止的话)信号干扰。现代系统由数字域和模拟域均可操作的组件组成,这些组件必须经过精心设计,以确保整个系统的信号完整性。 在混合信号系…

MySQL学习记录 —— 이십이 MySQL服务器文件系统(2)

文章目录 1、日志文件的整体简介2、一般、慢查询日志1、一般查询日志2、慢查询日志FILE格式TABLE格式 3、错误日志4、二进制日志5、日志维护 1、日志文件的整体简介 中继服务器的数据来源于集群中的主服务。每次做一些操作时,把操作保存到重做日志,这样崩…

vscode+wsl2+anaconda环境的配置与使用

目录 下载anaconda Anaconda使用参考 vscodeubuntuanaconda 先用vscode连接本地ubuntu。 如果没有安装wsl2与ubuntu,可点击下面的链接。 问题:wsl install 无法解析服务器 成功记录: 在vscode终端用ubuntu安装anaconda。 创建pytho…

Spring如何管理Mapper

目录 一、背景二、猜测三、源码查看步骤1、创建MapperScannerConfigurer.java2、MapperScan注解3、MapperScannerRegistrar执行registerBeanDefinitions方法4、MapperScannerConfigurer执行postProcessBeanDefinitionRegistry方法5、执行doscan6、设置beanClass7、使用jdk生成代…

万界星空科技电线电缆MES系统实现线缆全流程追溯

MES系统通过高度集成的数据平台,对电线电缆的生产全过程进行实时监控与记录,从原材料入库开始,到生产过程中的各个关键控制点,再到成品出库,每一步操作都被详细记录并可追溯。这种全流程追溯能力主要体现在以下几个方面…

在组件中显示tuku的照片

一、问题 (1)错误:域名前面一定要加http://要不然会报错 (2)在使用 defineModel传值时一定要动态绑定,要不然图片不显示 (3)改完后在商品列表中显示图片信息必须 在显示的图片中取…

【Qt】QWidget在隐藏时,发送信号

1. 介绍 Qt中&#xff0c;QWidget隐藏时&#xff0c;默认不发送信号。需要重写hideEvent()函数实现。 2. 代码 #include <QWidget> class MyWidget : public QWidget {Q_OBJECT signals:void hiddenStateChanged(bool isHidden);protected:void hideEvent(QHideEvent*…

【代码随想录】【算法训练营】【第69天】总结篇

前言 day 69&#xff0c;训练营的最后一个周一~ 总结 收获 历时近70天的训练营&#xff0c;打卡上百道题目&#xff0c;对于数组、链表、指针等的使用更加熟练了&#xff0c;也对dfs、bfs、动态规划有所熟悉&#xff08;当然前提是我得发现题目是该解法&#xff09;……代码…

js | this 指向问题

https://juejin.cn/post/6844904083707396109 任何函数运行的时候&#xff0c;都会创建一个context对象&#xff0c;context对象有一个this对象&#xff0c;在运行的时候决定。任何函数都对应一个reference类结构体&#xff08;具体叫啥有点忘了&#xff09;&#xff0c;简单就…

Linux入门笔记(指令)

操作系统是什么&#xff1f; 操作系统是一款做软硬件管理的软件。计算机系统自下而上可以大致分为4部分&#xff1a;硬件、操作系统、应用程序和用户。操作系统管理各种计算机硬件&#xff0c;为应用程序提供基础&#xff0c;并且充当计算机硬件与用户之间的中介。重点&#x…

Mybatis——生命周期和作用域

理解不同作用域和生命周期类别是至关重要的&#xff0c;因为错误的使用会导致非常严重的并发问题。 SqlSessionFactoryBuilder&#xff1a; 一旦创建了 SqlSessionFactory&#xff0c;就不再需要它了。 局部方法变量 SqlSessionFactory&#xff1a; 可以想象为&…

WebGIS面试题(第八期)

WebGIS面试题&#xff08;第八期&#xff09; 因为这些题目都是之前面试通过记忆面试结束后记录、部分通过录音。目前我还在整理&#xff0c;当然有一部分也是我在做项目中出现的问题&#xff0c;今天就先整理一点&#xff08;偷懒&#xff09;&#xff0c;因为有些答案还需要…

力扣145题:二叉树的后序遍历

给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输出…

C++复习的长文指南

C复习的长文指南 一、入门语法知识1.预备1.1 main函数1.2 注释1.3 变量1.3 常量1.4 关键字1.5 标识符明明规则 2. 数据类型2.1 整型2.1.1 sizeof关键字 2.2 实型&#xff08;浮点型&#xff09;2.3 字符型2.4 转义字符2.5 字符串型2.6 布尔类型bool2.7 数据的输入 3. 运算符3.1…