Odoo/OpenERP Domain 条件表达式总结
此总结助您快速理解并运用这些表达式。
Domain 条件表达式规则
- 基本格式:
- 最简格式: [('字段', '操作符', 值)]
- 示例: [('shenqr.user_id', '=', uid)]
- 元组结构:
- 每个条件是三元组: (字段, 操作符, 值)
- 字段:对象的 column(字段名)
- 操作符: =, !=, >, >=, <, <=, like, ilike, in, not in, child_of, parent_left, parent_right
- 值:用于比较的值
- 逻辑运算符:
- 默认逻辑运算符为 &(AND)
- |:OR
- !:NOT
- 在 XML 文件中,& 需用 & 表示,> 用 >,< 用 <,!= 用 <>
简单表达式
- 过滤状态为待批:
[('state', '=', 'wait_prove')]
- 过滤状态为草稿或待批:
[('state', 'in', ['draft', 'wait_prove'])]
- 过滤请假天数大于 3 天:
[('tians', '>', 3)]
带逻辑运算符的简单表达式
- AND 运算:
[('state', '=', 'wait_prove'), ('tians', '<=', 1)]
- OR 运算:
['|', ('state', '=', 'wait_prove'), ('tians', '<=', 1)]
- 示例:副经理待审批的请假单:
[('state', '=', 'wait_prove'), ('tians', '<=', 1)]
稍复杂的表达式
- AND 和 OR 的组合:
['&', ('state', '=', 'wait_prove'), '|', ('tians', '>', 1), ('shenqr.user_id', '<>', uid)]
- 示例:经理待审批的请假单:
[('state', '=', 'wait_prove'), ('tians', '>', 1), ('shenqr.user_id', '<>', uid), ('shenqr.department_id', '=', department_id), ('shenqr.user_id.groups_id', '=', 59)]
更复杂的表达式
- 嵌套逻辑运算:
['|', '&', '|', ('shenqr.user_id.groups_id', '=', 60), ('shenqr.user_id.groups_id', '=', 61), ('state', '=', 'wait_prove'), '&', ('state', '=', 'depmanager_proved'), ('tians', '>', 3)]
- 示例:总经理待审批的请假单:
['|', '|', '&', '|', ('shenqr.user_id.groups_id', '=', 60), ('shenqr.user_id.groups_id', '=', 61), ('state', '=', 'wait_prove'), '&', ('state', '=', 'depmanager_proved'), ('tians', '>', 3), '&', ('state', 'in', ['proved', 'rejected']), ('tians', '>', 3)]
注意事项
- 多个条件默认用 &(AND)连接。
- 在 XML 文件中,& 需用 & 表示,> 用 >,< 用 <,!= 用 <>。
- 使用括号和逻辑运算符组合复杂条件。
借助这些规则和示例,您能快速构建并理解 Odoo/OpenERP 的 Domain 条件表达式,用于过滤和查询数据。如需更多详细信息,可参考 Odoo 的官方文档。