odoo16-domain

odoo16-domain

在这里插入图片描述

参考:https://blog.csdn.net/u013250491/article/details/86699928

domain的使用注意以下几点:

  1. 是在py文件中使用还是在xml中使用,py文件是在后端使用可以利用orm, 而xml是在前端渲染,使用的是js,没有办法使用orm
  2. 如果在xml中使用,domain的格式建议为[[]], 二维数组的形式,js 不太认识[()] 这个玩意

一 domain表达式规则

最简单的格式:[(‘字段名’,‘操作符’,值)]

例:[(‘shenqr.user_id’,’=’,uid)]

1 字段名

1.1 py文件

可以使用ORM, 比如create_uid.company_id.id

1.2 xml文件

因为xml文件是在前端浏览器解析的,所以不能使用orm,只能使用单纯的字段,当然有变通手段,如果需要关联字段,可以在模型中新增一个字段, 通过compute或者 related进行计算或者关联.

2 操作符

操作符说明
=,>,<,>=,<=,!=比较运算,等于,大于,小于,大于等于,小于等于,不等于
like模糊匹配,通过%value%进行匹配
ilike同like ,但是忽略大小写
=like可以使用模式匹配,下划线-匹配一个字符,百分号%匹配零或者多个字符
=ilike同ilike ,但是忽略大小写
not like通过%value%不匹配的
not ilike类似not like,但是忽略大小写
=?未设置或者等于,未设置表示当值是None或者是False,其余和=一样
in判断value是否在元素的列表里面
not in判断value是否不再元素的列表里面
child_of判断是否value的子录, [(A,‘child_of’,A)]返回true

主要说明一下 child_of:

[('create_uid.company_id','child_of',[user.company_id.id])]

这句话表达的意思是, create_uid的公司是当前用户的公司或者子公司.

等价于

['|',('create_uid.company_id','=',[user.company_id.id]),('create_uid.company_id.parent_id','=',[user.company_id.id])]

3 值

  • 字符串

  • 布尔值 True False 数字等

  • 在xml中, 可以使用uid ,不能获取到其他信息了,是否跟context有关系?

    相关的js文件: addons/web/static/src/core/domain.js

4 条件间的逻辑

4.1 波兰表达式

domain使用了波兰表达式, 也称之为前缀表达式,可以不用括号就可以无歧义的表示运算顺序.

  • 中缀表达式 : a + b (我们常见的)
  • 前缀表达式 : + a b ( 波兰表达式,操作符在前面,方便计算机处理)
  • 后缀表达式 : a b + ( 逆波兰表达式,方便计算机处理)

波兰表达式和逆波兰表达式第一个不需要括号,第二个用stack处理很方便,这两个东西其实就是一个东西,只不过用了不同的表达形式。

4.2 操作符

  • “&” 默认操作符,可以省略,在xml中使用需要转义
  • “|”
  • “!”

简单来说,波兰表示法是一种操作符置于操作数前,并且不需要括号仍然能无歧义地解析表达的方法。
以二元运算为例,从左至右读入表达式,遇到一个操作符后跟随两个操作数时,则计算之,然后将结果作为操作数替换这个操作符和两个操作数;重复此步骤,直至所有操作符处理完毕。

案例:

<filter string="我的待办" name="myjob"
domain="['&amp;','&amp;',('user_id_deal', '=', uid),('state','=','0'),'|','&amp;',('deal_type','=','1'),('chp_state','in',['0','1']),'&amp;',('deal_type','=','2'),('chp_state','=','2')]"/>

二 domain使用场景

1 关联字段

(Many2one/One2many/Many2many)过滤出不同的选择结果

account_id = fields.Many2one('account.account', string='Default Debit Account', domain=[('active', '=', False)])

也可以用于关系字段,下拉框的级联显示

position_id = fields.Many2one('hx.base.position',"岗位名称",domain='[("department_id","=",department_id)]')

2 在动作中使用domain,筛选符合条件的记录:

<record id="relate_partner_opportunities" model="ir.actions.act_window"><field name="name">Opportunities</field><field name="res_model">crm.lead</field><field name="view_mode">kanban,tree,form,graph,calendar</field><field name="domain">[('type','=','opportunity')]</field><field name="context">{'search_default_partner_id': active_id,'default_type': 'opportunity'}</field><field name="view_id" eval="False"/><field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
</record>

3 记录规则过滤

<record id="account_move_comp_rule" model="ir.rule"><field name="name">Account Entry</field><field name="model_id" ref="model_account_move"/><field name="global" eval="True"/><field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>

4 搜索过滤

 <record id="view_crossovered_budget_search" model="ir.ui.view"><field name="name">crossovered.budget.search</field><field name="model">crossovered.budget</field><field name="arch" type="xml"><search string="Budget"><field name="name" filter_domain="[('name','ilike',self)]" string="Budget"/><field name="date_from"/><field name="date_to"/><filter string="Draft" domain="[('state','=','draft')]" help="Draft Budgets"/><filter string="To Approve" domain="[('state','=','confirm')]" help="To Approve Budgets" /><field name="state"/></search>
</field>
</record>

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

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

相关文章

Paragon NTFS2023最新版Mac读写NTFS磁盘工具

Paragon NTFS for Mac是Mac平台上一款非常优秀的读写工具&#xff0c;可以在Mac OS X中完全读写、修改、访问NTFS硬盘、U盘等外接设备的文件。这款软件最大的亮点简书可以让我们读写 NTFS 分区&#xff0c;因为在Mac OS X 系统上&#xff0c;默认状态下我们只能读取NTFS 分区&a…

速成版-带您一天学完python自动化测试(selenium)

Selenium是一套web网站的程序自动化操作解决方案。我们通过编写自动化程序&#xff0c;使得自动完成浏览器界面的相关操作&#xff0c;除了能够自动化的完成相关操作&#xff0c;还能从web页面获取相关信息&#xff0c;然后通过程序进行分析处理&#xff0c;本质上就是提升从网…

25.5 matlab里面的10中优化方法介绍——牛顿法(matlab程序)

1.简述 1 牛顿法简介 牛顿迭代法&#xff08;Newton’s method&#xff09;又称为牛顿-拉夫逊&#xff08;拉弗森&#xff09;方法&#xff08;Newton-Raphson method&#xff09;&#xff0c;它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 多数方程不存…

【spring】spring bean的生命周期

spring bean的生命周期 文章目录 spring bean的生命周期简介一、bean的创建阶段二、bean的初始化阶段三、bean的销毁阶段四、spring bean的生命周期总述 简介 本文测试并且介绍了spring中bean的生命周期&#xff0c;如果只想知道结果可以跳到最后一部分直接查看。 一、bean的…

图像滤波器

图像噪声 • 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理 的信号。 • 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量&#xff0c;图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声…

【技术架构】技术架构的演进

文章目录 前言1.名词解释(常见概念)1.1 应用&#xff08;Application&#xff09; / 系统&#xff08;System&#xff09;1.2 模块&#xff08;Module&#xff09; / 组件&#xff08;Component&#xff09;1.3 分布式&#xff08;Distributed&#xff09;1.4 集群&#xff08;…

机器学习 day30(正则化参数λ对模型的影响)

λ对Jcv和Jtrain的影响 假设该模型为四阶多项式当λ很大时&#xff0c;在最小化J的过程中&#xff0c;w会很小且接近0&#xff0c;此时模型f(x)近似于一个常数&#xff0c;所以此时模型欠拟合&#xff0c;Jtrain和Jcv都很大当λ很小时&#xff0c;表示模型几乎没有正则化&…

5.2.tensorRT基础(2)-使用onnx解析器来读取onnx文件(源码编译)

目录 前言1. ONNX解析器2. libnvonnxparser.so3. 源代码编译4. 补充知识总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 t…

Rocky Linux 8.4在Tesla P100服务器里的部署及显卡cudnn安装-极度精简

安装Rocky linux教程 https://developer.aliyun.com/article/1074889 注意事项 Tesla P100服务器&#xff0c;按Delete进入bios,设置Daul模式&#xff0c;第一选项选UEFI hard disk(用驱动盘选这个)&#xff0c;usb的就选UEFI usb 安装rocky linux时&#xff0c;这两项默认&…

css中flex后文本溢出的问题

原因&#xff1a; 为了给flex item提供一个合理的默认最小尺寸&#xff0c;flex将flex item的min-width 和 min-height属性设置为了auto flex item的默认设置为&#xff1a; min-width&#xff1a; auto 水平flex布局 min-height&#xff1a;auto 垂直flex布局 解决办法&…

【ICCV2023】Scale-Aware Modulation Meet Transformer

Scale-Aware Modulation Meet Transformer, ICCV2023 论文&#xff1a;https://arxiv.org/abs/2307.08579 代码&#xff1a;https://github.com/AFeng-x/SMT 解读&#xff1a;ICCV2023 &#xff5c; 当尺度感知调制遇上Transformer&#xff0c;会碰撞出怎样的火花&#xff1…

【Nodejs】Node.js简介

1.前言 Node 的重要性已经不言而喻&#xff0c;很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外&#xff0c;目前最为流行的 Web 开发模式是前后端分离的形式&#xff0c;即前端开发者与后端开发者在自己喜…

Gitlab 合并分支与请求合并

合并分支 方式一&#xff1a;图形界面 使用 GitGUI&#xff0c;右键菜单“GitExt Browse” - 菜单“命令” - 合并分支 方式二&#xff1a;命令行 在项目根目录下打开控制台&#xff0c;注意是本地 dev 与远程 master 的合并 // 1.查看本地分支&#xff0c;确认当前分支是否…

2、HAproxy调度算法

HAProxy的调度算法可以大致分为以下几大类&#xff1a; 静态算法&#xff1a;这类算法的调度策略在配置时就已经确定&#xff0c;并且不会随着负载的变化而改变。常见的静态算法有&#xff1a; Round Robin(轮询) Least Connections(最少连接数) Static-Weight(静态权重) Sourc…

QSlider 样式 Qt15.15.2 圆形滑块

在看文档的时候测试了一下demo&#xff0c;然后发现了一个有意思的东西&#xff0c;自定义滑块为带边框的圆形。 在设置的时候边框总是和预期的有点误差&#xff0c;后来发现了这样一个计算方式可以画一个比较标准的圆。&#xff08;ABCDEF在下方代码块内&#xff09; 滑块的…

Kubernetes 之CNI 网络插件大对比

介绍 网络架构是Kubernetes中较为复杂、让很多用户头疼的方面之一。Kubernetes网络模型本身对某些特定的网络功能有一定要求&#xff0c;但在实现方面也具有一定的灵活性。因此&#xff0c;业界已有不少不同的网络方案&#xff0c;来满足特定的环境和要求。 CNI意为容器网络接…

【iOS】—— 持久化

文章目录 数据持久化的目的iOS中数据持久化方案数据持久化方式分类内存缓存磁盘缓存 沙盒机制获取应用程序的沙盒路径沙盒目录的获取方式 持久化数据存储方式XML属性列表Preferences偏好设置&#xff08;UserDefaults&#xff09;数据库存储什么是序列化和反序列化&#xff0c;…

Hadoop概念学习(无spring集成)

Hadoop 分布式的文件存储系统 三个核心组件 但是现在已经发展到很多组件的s 或者这个图 官网地址: https://hadoop.apache.org 历史 hadoop历史可以看这个: https://zhuanlan.zhihu.com/p/54994736 优点 高可靠性&#xff1a; Hadoop 底层维护多个数据副本&#xff0c;所…

工程师分享:如何解决传导干扰?

电磁干扰 EMI 中电子设备产生的干扰信号是通过导线或公共电源线进行传输&#xff0c;互相产生干扰称为传导干扰。传导干扰给不少电子工程师带来困惑&#xff0c;如何解决传导干扰&#xff1f; 找对方法&#xff0c;你会发现&#xff0c;传导干扰其实很容易解决&#xff0c;只要…

Jmeter基础篇(17)Jmeter中Stop和X的区别

一、前言 在Apache JMeter中&#xff0c;Stop和X之间存在一些区别。虽然它们都是用于结束测试的不同方法&#xff0c;但它们在实施方式和效果上存在一些差异。 二、Jmeter中的Stop 首先&#xff0c;让我们了解一下Stop。 在JMeter中&#xff0c;Stop是指在测试结束时关闭线…