odoo domain表达式

作者:luohuayong
链接:http://www.jianshu.com/p/ec55ddf3d857

Domain即三元的表达式,‘字段’‘条件’变量。#[('name', '=', name)]

操作符

=,!=,>,>=,<,<= 

比较运算,等于,不等于,大于,大于等于,小于,小于等于

like/not like

模糊/模糊不匹配,可以使用通配符,下划线“_”匹配一个字符,百分号“%”匹配零或者多个字符

 ilike

也属于模糊查询,但是不区分大小写

in/not in

包含/不包含,判断值是/否在元素的列表里面

 多条件的逻辑运算

['&', ('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,所以如下。

 
  1. [('name','=','ABC'),

  2. ('language.code','!=','en_US')]

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

 
  1. [('name','=','ABC'),

  2. ('language.code','!=','en_US'),

  3. '|',('country_id.code','=','be'),

  4. ('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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值