Django无法使用的类型列表,即使我传入了一个对象?(多对多字段)

2024-06-17 10:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我的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类型的,所以我对错误消息感到非常困惑。有什么想法吗

编辑:我相信已经解决了这个问题,{}就是问题所在,特别是{}。由于某种原因,在我的读入阶段,它以某种方式被设置为一个列表,而不是我认为的字符串


Tags: 对象inaddididstarget列表objects
1条回答
网友
1楼 · 发布于 2024-06-17 10:34:16

因为c是一个Course对象,所以它包含一个列表,这是不能散列的部分。尝试使用.append()而不是.add()add()方法适用于集合,这些集合需要对对象进行哈希处理,因为它需要比较项以获得唯一性

相关问题 更多 >