You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的可迭代对象,不能包含任何列表、字典等不可哈希的类型。

具体解决步骤:

  1. 清洗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]
    
  2. 修正Many2Many赋值格式
    直接将清洗后的纯整数列表传入,不需要额外嵌套或多余转换:

    'channel_partner_ids': [(6, 0, cleaned_partner_ids)]
    

    转成tuple也可以,但前提是内部元素都是整数:

    'channel_partner_ids': [(6, 0, tuple(cleaned_partner_ids))]
    
  3. 调试排查技巧
    可以先打印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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:44:54