我正在尝试为我的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
是在前面的代码中创建的课程对象,exclusions
是从课程到自身的多对多字段,'ex'只是一个字符串。
如果我尝试使用exclus = Course.objects.create(ID=ex)
,也会出现同样的错误。错误似乎是说我传递给c.exclusions.add
的exclus是一个列表,但它显然是一个对象。我甚至尝试将exclus切换到exclus[0]以查看它是否认为它是一个列表,但这给了我error: Course Object not iterable
,所以它说它是Object类型的,所以我对错误消息感到非常困惑。有什么想法吗
编辑:我相信已经解决了这个问题,{
因为
c
是一个Course对象,所以它包含一个列表,这是不能散列的部分。尝试使用.append()
而不是.add()
。add()
方法适用于集合,这些集合需要对对象进行哈希处理,因为它需要比较项以获得唯一性相关问题 更多 >
编程相关推荐