如何在Odoo XML-RPC API调用中正确使用AND/OR逻辑搜索运算符
错误原因
你遇到的报错是因为Odoo ORM的搜索域采用前缀波兰表示法,逻辑运算符需要放在待连接的条件之前,且所有运算符、条件都要平级放在搜索域列表中,你之前的写法将|运算符和两个state条件封装为一个独立子列表,导致系统无法识别该结构为合法的运算符和条件组合。
解决方案
方案1(首选):使用in运算符
针对同一字段匹配多个值的场景,直接使用in运算符即可,写法更简洁易读:
models.execute_kw(db, uid, password,'stock.move', 'search_read', [[ ['origin','=','INVOICE ## 44'], ['picking_type_id', '=', 2], ['product_id', '=', 123], ['state', 'in', ['cancel', 'assigned']] ]])
方案2:正确使用|或运算符
如果需要用到逻辑或实现多条件匹配,需要将运算符放在待连接的两个条件之前,且和其他条件平级放置:
models.execute_kw(db, uid, password,'stock.move', 'search_read', [[ ['origin','=','INVOICE ## 44'], ['picking_type_id', '=', 2], ['product_id', '=', 123], '|', ['state', '=', 'cancel'], ['state', '=', 'assigned'] ]])
说明:逻辑运算符
|(或)、&(且,默认)、!(非)都需要遵循前缀写法规则,多个逻辑条件嵌套时从右向左匹配运算顺序。
内容的提问来源于stack exchange,提问作者apexprogramming
相关产品推荐
相关产品推荐

