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里, 过滤关联字段记录
原文地址:https://www.cnblogs.com/itelephant/p/11819150.html