Odoo 10搜索条件定义报错:TypeError: unhashable type: 'list'求助
问题分析与解决方案
你的搜索条件定义不正确,报错TypeError: unhashable type: 'list'的核心原因是违反了Odoo搜索域的语法规则。
错误原因
Odoo的搜索域要求是一维列表结构,由条件元组和逻辑运算符('|'/'&'/'!')直接组成。你把['|', ("type", "=", "data"), ("type", "=", "translation")]作为子列表嵌套在主列表中,Odoo解析时会把这个子列表当成一个条件项处理,但列表是不可哈希的类型,因此触发了这个报错。
正确的搜索域写法
把嵌套的子列表去掉,将逻辑运算符和对应条件直接放在主列表的同一层级即可:
.search([ ("product_id", "=", int(product_id)), ("language", "=", language), '|', ("type", "=", "data"), ("type", "=", "translation") ])
逻辑说明
Odoo的搜索域采用**后缀表达式(逆波兰表达式)**来处理逻辑关系:
- 前两个条件
("product_id", "=", ...)和("language", "=", ...)默认是逻辑与的关系 '|'表示它后面紧跟的两个type条件是逻辑或的关系- 整体逻辑正好匹配你的预期:
(product_id匹配 AND language匹配) AND (type为data OR type为translation)
额外注意事项
- 所有条件必须是
(字段名, 运算符, 值)格式的元组 - 逻辑运算符是字符串类型,不能放在元组或子列表中
- 整个搜索域必须是一维列表,禁止嵌套子列表
内容的提问来源于stack exchange,提问作者M.E.
相关产品推荐
相关产品推荐

