odoo 中的 domian 和 运算符

简介: 大家好, 我们今天主要来介绍一下odoo 中的 Domian 。 什么是Domain ? 简单的说就是一种条件语句,用来过滤您的数据。这些条件,通过使用Polish Notation(波兰表达式) 来定义。

大家好,

我们今天主要来介绍一下odoo 中的 Domian 。

什么是Domain ? 简单的说就是一种条件语句,用来过滤您的数据。这些条件,通过使用Polish Notation(波兰表达式) 来定义。

比如:

正 常 表 达 : ((A AND B) OR C ) OR (D AND E)
波兰表达式: ['|', '|', '&', A, B, C, '&', D, E]

解释:

步骤一:

从外面的运算符开始,将它移动到最前面

((A AND B) OR C ) OR (D AND E) => OR ((A AND B) OR C ) (D AND E)

注意:下划线的为移动的运算符

步骤二:

重复步骤一,直到所有运算符都移动至最左侧

OR ((A AND B) OR C ) (D AND E) => OR OR ((A AND B) C ) (D AND E)
OR OR ((A AND B) C ) (D AND E) => OR OR AND ((A B) C ) (D AND E)
OR OR AND ((A B) C ) (D AND E) => OR OR AND ((A B) C ) AND (D E)

步骤三:

去除所有的括号

polish_domain_notation

最后,让我们将表达式写入xml 文件

<field name="lot_id" domain="['|', '&amp;', ('product_id', '=', product_id), ('product_id.tracking', '!=', 'serial'), ('on_work_order_id', '=', id)]" groups="stock.group_production_lot"/>

注意: 在写xml 的时候,要用

'&amp;'

代替 ‘&’

接下来,

我们需要说说odoo中的 domain 运算符:

判断运算 : ! (否), | (或), & (与)

条件运算:
 '=', '!=', '<=', '<', '>', '>=', '=?', '=like', '=ilike', 'like', 'not like', 'ilike', 'not ilike', 'in', 'not in', 'child_of'

实例:[输入]
输入:
记录 1: Openerphk
记录 2: openerphk
记录 3: Opensource
记录 4: opensource
记录 5: Open
记录 6: openh
记录 7: Odoohk
记录 8: odoohk
记录 9: Odooopenerphk
记录 10: OdooOpenerphk

'like': [('input', 'like', 'open')] - 返回区分大小写的 (通配符 - '%open%') 搜索的结果.
O/p: open, opensource, openerphk, Odooopenerphk

'not like': [('input', 'not like', 'open')] - 然后结果与大小写敏感不匹配(通配符 - '%open%') 搜索的结果.
O/p: Openerphk, Opensource, Open, Odoohk, odoohk, OdooOpenerphk

'=like': [('name', '=like', 'open')] - 返回恰好是 (= 'open') 大小写敏感搜索的结果.
O/p: open

'ilike': [('name', 'ilike', 'open')] - 返回恰好是(通配符 - '%open%') 大小写不敏感的搜索结果.
O/p: Openerphk, openerphk, Opensource, opensource, Open, open, Odooopenerphk, OdooOpenerphk

'not ilike': [('name', 'not ilike', 'open')] - 返回结果与大小写敏感不匹配 (通配符 - '%open%') 的搜索结果.
O/p: Odoohk, odoohk

'=ilike': [('name', '=ilike', 'open')] - 返回结果恰巧是 (= 'open' or 'Open') 大小写不敏感的搜索结果.
O/p: Open, open

'=?':name = 'odoo' parent_id = False [('name', 'like', name), ('parent_id', '=?', parent_id)] - 返回名称域结果 & True
name = 'odoo' parent_id = 'openerp' [('name', 'like', name), ('parent_id', '=?', parent_id)] - 返回名称域结果 & parent_id 域结果
'=?' 是一个捷径术语,只要右侧为None 或者False ,结果就是TRUE。'=?' 在一些情况类似 '=' 

'in': [('value1', 'in', ['value1', 'value2'])] - 此运算符会检查 value1 是否在右侧的列中出现.

'not in': [('value1', 'not in', ['value2'])] - 操作符将检查value1在右项列表中是否不存在;

* “in”和“not in”需要使用值列表/元组,  '=' 和 '!=' 可以应用于字符串

'=': value = 10 [('value','=',value)] 

'!=': value = 15 [('value','!=',value)] 

'child_of': parent_id = '1' #Agrolait 'child_of': [('partner_id', 'child_of', parent_id)] - 返回给与的parent_id中partner_id左右列表

'<=', '<', '>', '>=': 这些运算符主要用于比较日期。-
[('date', '>=', date_begin), ('date', '<=', date_end)].

当然,您也可以比较 int 或者 float .

目录
相关文章
|
边缘计算 监控 算法
边缘计算的挑战和机遇
讨论了边缘计算面临的挑战和机遇,包括数据安全、网络稳定性、实时性能、异构性兼容性问题,并探索了其在不同应用场景中的潜力和商业模式创新。
627 0
|
SQL 人工智能 关系型数据库
我在IDEA编辑器中使用通义灵码
体验了通义千问后,我开始使用智能编码助手通义灵码,它让代码开发更加高效便捷。通过具体的应用场景,如项目私有化改造,利用通义灵码生成PO类和SQL脚本,大幅提升了开发效率。正确的使用姿势包括提供提示词和多次尝试,能够更好地发挥通义灵码的智能辅助功能。
684 2
|
监控 安全 Linux
在Linux中,如何设置定时任务(cron job)?
在Linux中,如何设置定时任务(cron job)?
|
存储 开发工具 git
Git日常问题: 什么是LFS?及其错误解决办法
Git LFS(Git Large File Storage)是Git的一个扩展,用于管理大型文件,通过将大文件的实际内容存储在远程服务器上,而Git仓库中只保留一个轻量级的文本指针,从而加速仓库操作的速度并减小仓库大小。当遇到Git LFS相关错误时,通常需要安装Git LFS工具并按照官方文档进行配置。
1107 2
Git日常问题: 什么是LFS?及其错误解决办法
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
人工智能 小程序
小小万年历改头换面了
小小万年历改头换面了
82 0
|
Java 应用服务中间件 API
如何在Java中实现WebSocket?
如何在Java中实现WebSocket?
|
JavaScript 网络安全 开发工具
对象存储oss使用问题之文件上传在暂停时报错:ResponseError: socket hang up如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
1884 0
|
SQL 关系型数据库 数据库