odoo10学习笔记1(Domain表达式)
2017-07-17 08:09
344 查看
今天学习下Domain表达式。
Domain是个多条件的列表,每个条件是一个三元表达式:[(字段名,操作符,值), (字段名,操作符,值)]
tree视图的过滤器
其它学习到了再补充
注意如果需要在xml使用Domain,大于,小于因为和标签符号一样所以需要转义,大于
Odoo是使用了波兰表示法,简单来说,波兰表示法是一种操作符置于操作数前,并且不需要括号仍然能无歧义地解析表达的方法。
波兰表示法的运算顺序
以二元运算为例,从左至右读入表达式,遇到一个操作符后跟随两个操作数时,则计算之,然后将结果作为操作数替换这个操作符和两个操作数;重复此步骤,直至所有操作符处理完毕。
举个栗子
其中a,b,c,e,f,g分别是不带逻辑运算符的表达式,表达式的运算顺序:
逻辑运算符包括
逻辑运算符默认是'与',‘与’运算符可以不写。
实例
“名字为 ABC”,就是一个最简单的单条件Domain。
“名字为 ABC 而且 语言编码不为en_US”,Domain里条件默认逻辑关系就是and,所以如下。
“名字为 ABC 而且语言编码不为 en_US 而且国家的编码为 be 或者 de”。
如果我们要做到这个效果
先从里面开始,把or提前
把里面的and提前,去掉括号
所以最后的domain可以这样写
当然了,我们为什么不写得让自己也容易看一点呢,如下:
作者:luohuayong
链接:http://www.jianshu.com/p/ec55ddf3d857
什么是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 | ??? |
>,小于
<
值
值进行筛选的变量,必须能通过操作符来和字段进行比较。多条件的逻辑运算
['&', ('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] [' 4000 |',((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
链接:http://www.jianshu.com/p/ec55ddf3d857
相关文章推荐
- Odoo10学习笔记三:模型(结构化的应用数据)、视图(用户界面设计)
- python 学习笔记 10 -- 正则表达式
- odoo10学习笔记八:qweb引擎
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式 课后练习题 4-10
- Odoo10学习笔记一:入门与基础视图格式
- odoo10学习笔记四:onchange、唯一性约束
- odoo10学习笔记十七:controller
- odoo10学习笔记2(权限控制)
- scala学习笔记10 文件和正则表达式
- odoo10学习笔记五:高级视图
- C++ 学习笔记(10)泛型算法、lambda表达式、bind函数、迭代器
- odoo10学习笔记十四:mixin其他功能模块
- odoo10学习笔记六:工作流、安全机制、向导
- odoo10学习笔记七:国际化、报表
- odoo10学习笔记十六:定时任务
- odoo10学习笔记九:Odoo10 API
- odoo10学习笔记二:继承(扩展)、模块数据
- odoo10学习笔记十:Actions
- Java学习笔记-字符串、正则表达式(String,regex)
- 黑马程序员_基础学习笔记(10)