Django Unhashable Type List 即使我传入一个对象?(多对多字段)
Posted
技术标签:
【中文标题】Django Unhashable Type List 即使我传入一个对象?(多对多字段)【英文标题】:Django Unhasable Type List even though im passing in an object ?(many to many field) 【发布时间】:2020-05-31 21:02:51 【问题描述】:我正在尝试为我的 django 应用程序运行迁移脚本,但我不断收到TypeError: unhashable type: 'list'
,即使我显然传入了一个对象:
我明白了:
error line 87, in buildCisc
c.exclusions.add(exclus)
line 944, in add
self._add_items(
line 1119, in _add_items
target_ids = self._get_target_ids(target_field_name, objs)
line 1059, in _get_target_ids
target_ids.add(target_id)
TypeError: unhashable type: 'list'
当我运行以下代码时
...
for ex in exclusionList:
if len(Course.objects.filter(ID=ex)) > 0: # exclusion course already exsists
exclus = Course.objects.filter(ID=ex)
c.exclusions.add(exclus[0])
else: # exclusion course does not exsist yet so we must create it first
exclus = Course(ID=ex)
exclus.save()
c.exclusions.add(exclus) #this is line 87 causing the error
c
是在先前代码中创建的 Course 对象,exclusions
是从 Course 到自身的多对多字段,“ex”只是一个字符串。
如果我尝试使用 exclus = Course.objects.create(ID=ex)
代替,也会给出相同的错误。错误似乎是说我传递给c.exclusions.add
的排除是一个列表,但它很明显是一个对象。我什至尝试将 exclus 切换到 exclus[0] 以查看它是否以某种方式认为它是一个列表,但这给了我error: Course Object not iterable
所以它说它是 Object 类型,所以我对错误消息感到非常困惑。有什么想法吗?
编辑:我相信已经解决了这个问题,exclus = Course(ID=ex)
就是问题所在,特别是ex
。出于某种原因,在我的阶段性阅读中,它以某种方式设置为一个列表,而不是我认为的字符串
【问题讨论】:
【参考方案1】:由于c
是一个Course 对象,它包含一个列表,这是不能散列的部分。尝试使用.append()
而不是.add()
。 add()
方法适用于集合,并且需要对对象进行哈希处理,因为它需要比较项目的唯一性。
【讨论】:
不幸的是,使用它给了我一个新错误:AttributeError: 'ManyRelatedManager' object has no attribute 'append'
您能否发布您的课程模型以便我们了解它是如何定义的?以上是关于Django Unhashable Type List 即使我传入一个对象?(多对多字段)的主要内容,如果未能解决你的问题,请参考以下文章
如何克服 TypeError: unhashable type: 'list'
如何克服 TypeError: unhashable type: 'list'
Python debug——TypeError unhashable type(list/set/dict)
TypeError: unhashable type: 'numpy.ndarray'