odoo中使用domain基础操作

时间:2024-03-14 10:28:37

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开发中非常重要,可以有效地帮助开发者进行记录的搜索和筛选。

相关文章