doamin 过滤条件
Posted itelephant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了doamin 过滤条件相关的知识,希望对你有一定的参考价值。
在odoo中,通过domain来过滤数据记录
domain是一个list,里面有多个条件
条件是一个有3个元素的元祖 (‘字段名‘,‘比较操作符‘,‘值‘)
-
字段名
当前模型的字段或者是通过点操作符访问当前模型的Many2one / Many2Many对象。如果左边是Many2Many对象的时候,则表示左边只要任意一个值符合条件则符合条件。
-
比较操作符
操作符 | 含义 |
---|---|
= | 等于 |
!= | 不等于 |
>= | 大于等于 |
> | 大于 |
<= | 小于等于 |
like | 模糊查询 |
ilike | 忽略大小写,模糊查询 |
not like | 模糊不匹配 |
in | 包含在内 |
not in | 不包含 |
child_of | 判断是否是value的子集 |
进行筛选的变量,必须能通过操作符来和字段进行比较。
比如你要过滤出产品为服务类型并且价格大于1000的产品
domain = [(‘product_type‘, ‘=‘, ‘service‘), (‘unit_price‘, ‘>‘, 1000)] domain作用在一个model上用model.search(domain)
默认的 domain是以and的方式连接2个条件也就是说 上面的domain表达式等于 [‘&‘,(‘product_type‘, ‘=‘, ‘service‘), (‘unit_price‘, ‘>‘, 1000)],and用&表示(逻辑操作符),这种把操作符放在前面的表达式叫做波兰表示法
-
逻辑操作符
-
& (AND) 接2个操作数
-
| (OR) 接2个操作数
-
! (NOT) 接1个操作数
-
[‘|‘,(‘product_type‘, ‘=‘, ‘service‘),‘!‘, ‘&‘,(‘unit_price‘, ‘>=‘, 1000),(‘unit_price‘, ‘<‘, 2000)] 读法,先看最后一个逻辑符 后面所有的条件作为操作数, 变成[‘|‘, (‘product_type‘, ‘=‘, ‘service‘), ‘!‘, cond] 同样规则[‘|‘, (‘product_type‘, ‘=‘, ‘service‘), cond]
domain的另外一个用途是用在关联字段里,可以在model.py field里定义或在xml view的field里, 过滤关联字段记录
以上是关于doamin 过滤条件的主要内容,如果未能解决你的问题,请参考以下文章