Odoo 17 many2many创建报错:unhashable type: 'list' 求助
解决Odoo中Many2Many字段赋值时的"unhashable type: 'list'"错误
这个报错的核心原因是你传入(6, 0, tuple(total_partner_ids))中的total_partner_ids包含非哈希类型元素(比如嵌套列表),Odoo的ORM处理Many2Many字段的(6,0, ids)格式时,要求第三个参数必须是纯整数ID的可迭代对象,不能包含任何列表、字典等不可哈希的类型。
具体解决步骤:
清洗ID列表
先检查total_partner_ids的结构,确保所有元素都是Odoo合作伙伴的整数ID。如果是从Slack导入时带了嵌套结构(比如[[1], [2]])或字典对象,需要先提取纯ID:# 示例:如果是嵌套列表结构,提取内层整数 cleaned_partner_ids = [pid for sublist in total_partner_ids for pid in sublist] # 示例:如果是字典结构,提取id字段 cleaned_partner_ids = [item['partner_id'] for item in total_partner_ids]修正Many2Many赋值格式
直接将清洗后的纯整数列表传入,不需要额外嵌套或多余转换:'channel_partner_ids': [(6, 0, cleaned_partner_ids)]转成
tuple也可以,但前提是内部元素都是整数:'channel_partner_ids': [(6, 0, tuple(cleaned_partner_ids))]调试排查技巧
可以先打印total_partner_ids的结构和元素类型,快速定位问题:print("原始ID列表结构:", total_partner_ids) print("元素类型:", [type(pid) for pid in total_partner_ids])如果输出里出现
<class 'list'>,就是报错的直接原因。
常见误区提醒:
- 不要直接把Slack返回的用户对象列表传给Odoo的Many2Many字段,必须提取对应的Odoo合作伙伴ID
- 外层转
tuple无法解决内部元素是列表的问题,因为ORM会遍历检查每个元素的哈希性
内容的提问来源于stack exchange,提问作者Ali Raza
相关产品推荐
相关产品推荐

