什么是Domain

[('create_uid','=',user.id)]

Domain是个多条件的列表,每个条件是一个三元表达式:[(字段名,操作符,值), (字段名,操作符,值)]

Domain使用场合

  • 权限管理中的行级权限
  • tree视图的过滤器
  • 其它学习到了再补充

字段名

当前模型的字段或者是通过点操作符访问当前模型的Many2one / Many2Many对象。如果左边是Many2Many对象的时候,则表示左边只要任意一个值符合条件则符合条件。

操作符

名称 说明
=,!=,>,>=,<,<= 比较运算,等于,不等于,大于,大于等于,小于,小于等于
like 模糊匹配,可以使用通配符,下划线“_”匹配一个字符,百分号“%”匹配零或者多个字符
ilike 类似like,不区分大小写
not like 模糊不匹配的
in 包含,判断值是否在元素的列表里面
not in 不包含,判断值是否不在元素的列表里面
child_of 判断是否value的子记录,通过_parent_name实现,不太理解
parent_left ???
parent_right ???

注意如果需要在xml使用Domain,大于,小于因为和标签符号一样所以需要转义,大于>,小于<

值进行筛选的变量,必须能通过操作符来和字段进行比较。

多条件的逻辑运算

['&', ('partner_id.coutnry_id.code', '=', 'CN'), ('partner_id.coutry_id.code', '=', 'US')]

Odoo是使用了波兰表示法,简单来说,波兰表示法是一种操作符置于操作数前,并且不需要括号仍然能无歧义地解析表达的方法。

波兰表示法的运算顺序
以二元运算为例,从左至右读入表达式,遇到一个操作符后跟随两个操作数时,则计算之,然后将结果作为操作数替换这个操作符和两个操作数;重复此步骤,直至所有操作符处理完毕。

举个栗子

['|','&','|',a,b,c,'&',d,e]

其中a,b,c,e,f,g分别是不带逻辑运算符的表达式,表达式的运算顺序:

['|','&','|',a,b,c,'&',d,e]
['|','&',(a | b),c,'&',d,e]
['|',((a | b) & c),'&',d,e]
['|',((a | b) & c),(d & e)]
[(((a | b) | c) | (d & e))]

逻辑运算符包括

符号 说明
丨(or) 或,二元运算
&(and) 与,二元运算
!(no) 非,单目运算

逻辑运算符默认是'与',‘与’运算符可以不写。

实例
“名字为 ABC”,就是一个最简单的单条件Domain。

[('name','=','ABC')]

“名字为 ABC 而且 语言编码不为en_US”,Domain里条件默认逻辑关系就是and,所以如下。

[('name','=','ABC'),
('language.code','!=','en_US')]

“名字为 ABC 而且语言编码不为 en_US 而且国家的编码为 be 或者 de”。

[('name','=','ABC'),
('language.code','!=','en_US'),
'|',('country_id.code','=','be'),
('country_id.code','=','de')]

如果我们要做到这个效果

A and (B or C) and D and E

先从里面开始,把or提前

A and (or B C) and D and E

把里面的and提前,去掉括号

and A or B C and D E

所以最后的domain可以这样写

A, '|', B, C, D, E

当然了,我们为什么不写得让自己也容易看一点呢,如下:

A, D, E, '|', B, C

 

作者:luohuayong
链接:https://www.jianshu.com/p/ec55ddf3d857
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Domain 表达式的用法的更多相关文章

  1. (23)odoo中的domain表达式

    ---------更新日期:09:10 2016-03-03 星期四---------* Domain 表达式             # 用于过滤记录数,相当于sql的where       ('f ...

  2. SQL进阶1:case表达式的用法示例

    一:case表达式的用法 1.SQL中的case表达式的作用是用来对"某个变量"进行某种转化,通常在select字句中使用,举个例子: 不能看出,case表达式很像我们的if el ...

  3. python lambda表达式简单用法【转】

    python lambda表达式简单用法 1.lambda是什么? 看个例子: g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>& ...

  4. cron表达式的用法 【比较全面靠谱】

    转: cron表达式的用法 cron表达式通过特定的规则指定时间,用于定时任务,本文简单记录它的部分语法和实例,并不完全,能覆盖日常大部分需求. 1. 整体结构 cron表达式是一个字符串,分为6或7 ...

  5. struts2中#,$,%的用法以及el,ognl表达式的用法

    OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例 取Session中的值 <c:out value="${sessionScope.user.userId}&quo ...

  6. C++11 中function和bind以及lambda 表达式的用法

    关于std::function 的用法:  其实就可以理解成函数指针 1. 保存自由函数 void printA(int a) { cout<<a<<endl; } std:: ...

  7. FEL表达式的用法

    Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过函数实现,运算符(+.-等都是Fel函数),所有这些函数都是可以替换的,扩展函数也非常简单. Fel有双引擎,同时支持解释执 ...

  8. (备忘)cron表达式的用法

    一.结构 cron表达式用于配置cronTrigger的实例,实现任务调度的功能. Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格 ...

  9. SQL 选择列 IF表达式,Contains表达式的用法

    因为业务需要需要使用到, 列中的字段或根据列值是否满足某一条件,进行输出.比如类似与  select if()  ……from……:(但是SQL Server 没有 if 表达式) 比如,如果Scor ...

随机推荐

  1. OracleBulkCopy 修正帮

    using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Refle ...

  2. 关于更新vs2017后发布的问题 命令“bower install”已退出,代码为 9009

    更新vs2017 尝试发布 出现  命令“bower install”已退出,代码为 9009 然后我点工具测试了一下nodejs 出现下图弹窗  百度了一下 没找到对策,有没有大侠知道怎么解决 解决 ...

  3. 取得MapReduce的Thread Dump

    ====2016/5/20: 经过上级指示,为了MR性能调优,需要截取MR的服务器的线程堆栈(Thread Dump) 战友介绍的方法是这样的: ①.使用ps命令[ps -ef | grep java ...

  4. [原创]SOUI GDI+渲染引擎下的字体特效,抛砖引玉

    由于SOUI是一种双渲染引擎的DUI库,默认在SKIA渲染引擎下是支持特效字体的,具体请参考DEMO中的源码. 但是使用GDI+渲染时是没有这些特效的,着实比较苦恼,此代抛砖引玉,细节实现 请自己再去 ...

  5. 使用 console.time() 计算js代码执行时间

    console.time('hellor'); for(var i=0;i<100000;i++){} console.timeEnd('hellor');

  6. mysql - 查看表字段和字段描述

    1.mysql查看表字段和字段描述 SELECT column_name, column_comment FROM information_schema.columns WHERE table_sch ...

  7. CentOS7安装confluenceWIKI并破解汉化

    关闭防火墙和selinux   开始搭建Wiki前,需要下载一些软件包. wget https://www.atlassian.com/software/confluence/downloads/bi ...

  8. C++派生类在构造和析构过程中做的事

    (一)构造时: (1)首先调用继承关系中第一个基类(最靠左边的)的构造函数,然后第二个,第三个,以此类推 (2)然后调用成员对象的构造函数,这个顺序按照定义的顺序,与构造函数初始化列表的顺序无关. ( ...

  9. Android-自动完成提示框CompletionTextView

    自动完成提示框CompletionTextView可以实现以下效果(提示框从那里出来是系统自动处理的): 类似于在百度输入框,输入一个字符,会自动提示很多和这个相关的条目内容 定义自动完成提示框(此控 ...

  10. mysql安装 卸载 查字符集编码

    下载地址 :     https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 解压zip  解压完之后的目录 在里面新建一 ...