odoo14 | odoo中domain的复杂写法

news2024/12/23 23:08:42

本片文章主要讲述domain中复杂业务需求的逻辑构思,关于doamin的使用位置会在另一篇文章中体现。

·二叉树与波兰式

在讲述domain的使用前先讲解一下科班生必学的《数据结构与算法》中二叉树遍历与波兰式的内容,如果你会二叉树先序遍历与波兰式转换请直接跳到下一节。

二叉树:二叉树(Binary tree)是树形结构的一个重要类型,许多实际问题抽象出来的数据结构往往是二叉树形式,其下面展示的就是某个二叉树的结构。

 树的相关基本术语:

上面展示的二叉树中,有一个根节点(F)

然后有它的左子树(cadb)和右子树(ehgm)

左子树(cadb)的子树根节点(B)是二叉树根节点(F)的子节点

在数据结构中,树有三种遍历方式:

  1. 先序遍历
  2. 中序遍历
  3. 后序遍历

先序遍历:即为 根左右 结构遍历,按上方展示二叉树遍历顺序为(FCADBEHGM)

中序遍历:即为 左根右 结构遍历,遍历顺序为(ACBDFHEMG)

后序遍历:即为 左右根 结构遍历,遍历顺序为(ABDCHMGEF)

为了方便记忆,可以用根的先后顺序来对应记忆,先访问根节点的就是先序遍历

·中缀表达式、波兰式与逆波兰式

中缀表达式

一般我们上小学时所使用的数学计算公式就是中缀表达式,即2*(1+3)的形式

把它转换成二叉树的模样就是这个样子

 中缀表达式有助于我们对二叉树的构造与理解,可对于计算机来说,这将是复杂的且难以理解的。

所以,波兰数理科学家提出了两个适用于计算机的遍历表达式,为了纪念他们的贡献,则将其命名为波兰表达式和逆波兰表达式

波兰表达式和逆波兰表达式的数理与先序遍历和后序遍历的遍历思想一致

波兰表达式则是对二叉树先序遍历的具象表达,则是先访问根节点,再访问左子节点,最后访问右子节点,遍历后的结果是*2+13

逆波兰表达式则是对二叉树的后序遍历的具象表达,即为先访问左子节点,再访问右子节点,最后才访问根节点,遍历后的结果是213+*

·中缀表达式与波兰式的转换

在odoo的domain中,对应业务中的复杂的逻辑,我们去直接画二叉树再去遍历访问写出波兰式则是一种时间的浪费,其实可以对中缀表达式直接转换为波兰式

还是以案例2*(1+3)来解析,在真实业务中每一个数字代表一个筛选条件例如:(‘state','=','pending'),而运算符则代表逻辑符例如:'|',所以在下面的解析中,会将数字称为业务节点,运输符称为逻辑节点。至于domain中可能会出现的逻辑符号以及对应的级别会以表展示,此处先解析思想。

先序遍历:先将业务节点与逻辑节点用括号隔开 (2)*((1)+(3)),然后将逻辑节点前移一个级,与业务节点同级的逻辑节点前移到最左 *(2)+((1)(3)),然后将括号全部打开得到结结果 *2+13

后序遍历也一样:(2)*((1)+(3))  >>>  (2)((1)(3)+)* >>> 213+*

·odoo中的domain

对于odoo中domain的写法[('a','=','b')]也恰好更适合使用波兰式

在domain中简单的单调与逻辑是默认使用的,例如:我希望想要state为draft和pending且active为真的

[('state','in',('draft','pending')),('active','=',True)]

但对于复杂逻辑就需要用到波兰式了

例如:我希望有department_id为2且state为draft的或state为pending且send_id为5的数据

按中缀表达式表达则为((department_id=2)&(state=draft))|((state=pending)&(send_id=5))

写进domain则为

['|','&',('department_id','=',2),('state','=','draft'),'&',('state','=','pending'),('send_id','=',5)]

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

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

相关文章

从零开始的深度学习之旅(2)

目录深层神经网络1. 异或门问题1.1 异或代码实现2.神经网络的层2.1 去除激活函数的异或门2.2 使用sigmoid函数的异或门3.从0实现深度神经网络的正向传播深层神经网络 1. 异或门问题 在第一篇的博客中,我们使用代码实现了与门 import torch X torch.tensor([[1,0,0],[1,1,0]…

通过实战总结的 使用GoFrame小技巧

文章目录gf gen dao设置参数可传可不传model作为结构体类型模型关联添加数据主程序如下:gomeGoods.MainImgs的定义:批量插入数据配置插件自动生成service总结一起学习有朋友问我能不能搞一个GoFrame技巧篇,让新手少踩坑的那种。今天他来了&am…

数据库-范式例题

目录 1、请简述满足1NF、2NF和3NF的基本条件。并完成下题:某信息一览表如下:其是否满足3NF,若不满足将其化为符合3NF的关系。 解:     1NF: 属性都是不可分割的数据项 2NF: 不存在部分函数依赖,存在传递函数依赖。 2NF: 不存在

算法复杂度分析中的渐近分析(基于输入大小)

为什么要进行性能分析? 有许多重要的事情需要注意,例如用户友好性、模块化、安全性、可维护性等。为什么要担心性能?答案很简单,只有当我们有性能时,我们才能拥有上述所有东西。因此,性能就像货币&#xf…

磷酸化多肽Asp-Arg-Val-Tyr(PO3H2)-Ile-His-Pro-Phe、129785-85-9

在血管平滑肌细胞中有多种作用,包括正常动脉的收缩,培养的细胞或病变血管的肥大或增生等。 编号: 200676 中文名称: 八肽DRV-pTyr-IHPF CAS号: 129785-85-9 单字母: H2N-DRV-pTyr-IHPF-OH 三字母: H2N-Asp-Arg-Val-Tyr(PO3H2)-Ile-His-Pro-Phe-COOH 氨基…

MySQL——进阶

第1章 存储引擎 1.1 MySQL体系结构 1.2 存储引擎介绍 定义:存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定…

msfconsole之制作windows木马并成功获取shell

msfconsole之制作windows木马并成功获取shell 一、工具简介     msfconsole 简称 msf 是一款常用的安全测试工具,包含了常见的漏洞利用模块和生成各种木马,其提供了一个一体化的集中控制台,通过msfconsole,你可以访问和使用所…

软考高级系统架构师_计算机组成与结构---备考笔记004

奇校验和海明码考的比较多,可以看到: 奇校验:比如有个11001 这个要进行校验,那么,需要在后面添加什么?注意,要添加0,因为奇校验,是奇数个1,这里已经有3个1了,所以后面要加0,变成110010 这样 然后我们再来看,如

01-SpringMVC项目构建

Overview 梳理了创建基于SpringMVC的项目创建流程和注意点,防止遗忘 1. 创建一个空项目 2. 添加新模块 3. 在pom文件中指定打包方式并刷新 4. 将模块目录结构改造成web项目 这里的web配置是你在pom文件中指定war的打包方式后就会出现的,当然没出现也可…

迅为3A5000_7A2000开发板龙芯全国产处理器LoongArch架构核心方案

1.全国产设计方案 从里到外 100% 全国产 从CPU自主指令系统到开发板每一个元器件,做到100%全国产化。 2.产品开发更快捷 PCIE 32路 相比同类嵌入式板卡仅2到4路的PCIE, 这款核心板可以支持多达32路的PCIE 3.0接口 3.工业化标准设计 遵循COM E…

数据库-mysql架构与sql执行原理(上)(一)

目录 一、一条查询的sql他是怎么样去执行的呢? 二、建立链接 同步 异步 三、连接方式 长链接 短链接 四、通信协议 Unix socket TCP/IP 共享内存 五、通信方式 单工 半双工 全双工 六、缓存 七、解析 八、预处理器 九、优化器 十、查询执行引擎…

ASEMI肖特基二极管MBR15200FAC参数,MBR15200FAC图片

编辑-Z ASEMI肖特基二极管MBR15200FAC参数: 型号:MBR15200FAC 最大重复峰值反向电压(VRRM):200V 最大RMS电桥输入电压(VRMS):140V 最大直流阻断电压(VDC&#xff09…

智慧零售解决方案-最新全套文件

智慧零售解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧零售全套最新解决方案合集一、建设背景 传统零售业发展趋势分析: (1)市场竞争日益激烈 零售业的发展一直是一个竞争性强的产业,这个市场的发…

数据结构之堆

堆: 堆是一颗完全二叉树,分为大根堆和小根堆两种。大根堆:根节点大于等于左右节点;小根堆:根节点小于等于左右节点。所以大根堆的根节点是最大值,小根堆的根节点是最小值。 c中priority_queue可以用来声明…

Axure原型创建折线、柱状等图形,引用echarts

1、在echarts网站选择对应的统计图形: 网址:Examples - Apache ECharts 2、对代码进行编辑,使其适配自己的业务。 3、在Axure中创建一个基本元件矩形。命名为:test 4、选择交互--载入时--打开连接--Fx 5、在插入变量中增加如下…

SVN windows安装及初步使用;及初次连接版本库、提交、还原、比对操作说明文档

派昂医药-SVN版本库说明总览&#xff1a; 1.说明 2.版本库地址 3.托管项目明细 4.SVN客户端安装 5.SVN-Win端版本操作 6.SVN客户端浏览 1.说明&#xff1a; <1、协议 SVN私有协议 <2、PC系统字符集要求 中文GBK编码&#xff1b;中文以外UTF-8编码&#xff0c;如乱码…

中国市场杂志社中国市场编辑部2022年第32期目录

前沿理论 新冠肺炎疫情下跨境冷链物流的新思考——以大连冷链业疫情为例 廖燕莲;谷玉红;尚书山; 1-3《中国市场》投稿&#xff1a;cnqikantg126.com 数字经济背景下数字服务税问题探析 李瑞玲; 4-6 我国工业能源效率提升的阻碍及其对策探究 韩洁平;田振东;张诗雅; …

DJ12-1 8086系列指令系统-2 数据传送指令

目录 1. 通用数据传送指令 &#xff08;1&#xff09;MOV 一般数据传送指令 &#xff08;2&#xff09;堆栈操作指令 &#xff08;3&#xff09;XCHG 交换指令 &#xff08;4&#xff09;XLAT 查表指令 &#xff08;5&#xff09;CBW 和 CWD 字位扩展指令 2. 输入输出指…

8点FFT实现全教程

个人认为编写8点FFT的编写,不要过分关注理论,重要的是理解整个流程。 参考文章: matlab 8点fft蝶形图,基2时抽8点FFT的matlab实现流程及FFT的内部机理_罗漫的博客-CSDN博客前言本来想用verilog描述FFT算法,虽然是8点的FFT算法,但写出来的资源用量及时延也不比调用FFT IP…

【第五部分 | JS WebAPI】5:1W字详解Bom对象

目录 | Bom概述 | window 、Bom、Dom 的关系 | window的load事件&#xff1a;把JS写进head里 如何把 JS 代码写到head里&#xff08;页面加载事件 onload&#xff09; 比onload更高效的加载事件 DOMContentLoaded | window的resize事件&#xff08;窗口大小改变的时候触发…