什么是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. 4619 Warm up 2

    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ][]; ...

  2. jdk1.7 环境变量配置

    Windows系统中设置环境变量如下图右击“我的电脑”,选择“属性”. 点击“高级”选项卡,选择“环境变量”.  在“系统环境变量”中设置上面提到的3个环境变量,如果变量已经存在就选择“编辑”,否则选 ...

  3. mongodb 更新操作

    db.aaaa.update({},{$push:{money:{$each:[8,9,10],$slice:-4}}}) db.aaaa.update({},{$addToSet:{money:{$ ...

  4. java Jvm工作原理学习笔记

    一.         JVM的生命周期 1.       JVM实例对应了一个独立运行的java程序它是进程级别 a)     启动.启动一个Java程序时,一个JVM实例就产生了,任何一个拥有pub ...

  5. Exception (3) Java exception handling best practices

    List Never swallow the exception in catch block Declare the specific checked exceptions that your me ...

  6. Alpha冲刺(九)

    Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...

  7. APUE(5)---标准I/O库 (1)

    一.引言 标准I/O库不仅是UNIX,许多i其他操作系统都实现了标准I/O库,所以这个库由ISO C标准说明.标准I/O库处理很多细节,如缓冲区分配,以及优化的块长度执行I/O等.这使得它便于用户使用 ...

  8. 14、Semantic-UI之菜单样式

    14.1 基础菜单样式   在Semantic-UI中使用class="ui menu". 示例:定义基础菜单样式 <div class="ui menu" ...

  9. C/C++学习的50个经典网站

    C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码.这份清单提供了源代码的链接以及它们的小说明.我已尽力包括最佳的C/C++源代码的网站.这不是一个完整的清 ...

  10. select2的一些隐藏功能

    select 3.5版本的说明文档里面存在 http://select2.github.io/select2/index.html option选项 sortResults query为查询字符串