Odoo中的domain是一个用于筛选记录的条件列表,它通常用于搜索、过滤和定义视图中可见记录的规则。Domain由一系列的元组组成,每个元组定义了一个筛选条件。这些条件可以是简单的字段比较,也可以是更复杂的逻辑组合。
基本语法
Domain的基础语法格式为:[('字段名', '操作符', 值)]
- 字段名:要筛选的模型字段。
- 操作符:比较操作符,如 ‘=’, ‘!=’, ‘>’, ‘<’, ‘>=’, ‘<=’, ‘like’, ‘ilike’, ‘in’, ‘not in’, ‘child_of’, 等。
- 值:与字段比较的值。
操作符说明
- =:等于。
- !=:不等于。
- >:大于。
- <:小于。
- >=:大于等于。
- <=:小于等于。
- like:模糊匹配,区分大小写。
- ilike:模糊匹配,不区分大小写。
- in:在某个列表中。
- not in:不在某个列表中。
- child_of:用于对具有层次结构的模型进行筛选。
组合条件
Domain可以使用&
(逻辑与)、|
(逻辑或)和!
(逻辑非)操作符来组合条件。如果不明确指定,条件之间默认为逻辑与关系。
实例代码
假设我们有一个模型res.partner
,并希望找到所有在北京的公司,且名称中包含"科技"的合作伙伴。下面是如何使用domain来实现这一点的示例:
partners = self.env['res.partner'].search([
('city', '=', '北京'), # 城市为北京
('name', 'ilike', '科技'), # 名称中包含科技
('is_company', '=', True) # 是公司
])
如果我们想要搜索名称中不包含"科技",并且不在北京或上海的合作伙伴,可以这样写:
partners = self.env['res.partner'].search([
('name', 'not ilike', '科技'), # 名称中不包含科技
'|', # 逻辑或
('city', '!=', '北京'), # 城市不是北京
('city', '!=', '上海'), # 城市不是上海
])
使用逻辑运算符
对于更复杂的逻辑,可以通过组合使用&
、|
和!
来构建。例如,寻找名字中包含"科技",位于"北京"或"上海"的合作伙伴:
partners = self.env['res.partner'].search([
('name', 'ilike', '科技'),
'|', # 逻辑或
('city', '=', '北京'),
('city', '=', '上海'),
])
在复杂的逻辑中,需要注意&
和|
操作符的使用顺序和组合,可能需要使用括号来确保逻辑的正确执行顺序。
Domain的这种灵活性和强大功能使得它在Odoo开发中非常重要,可以有效地帮助开发者进行记录的搜索和筛选。