首页 > 解决方案 > Django TypeError:int() 参数必须不是“设置”

问题描述

创建模型:

class Teacher(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Subject(models.Model):
    subject = models.CharField(max_length=200)

    teacher = models.ArrayReferenceField(to=Teacher)

    def __str__(self):
        return self.subject

尝试在 Django Admin 中添加主题时发生错误:

int() argument must be a string, a bytes-like object or a number, not 'set'

完整追溯:dpaste.com/3GWTC6P

标签: pythondjangomongodbdjango-models

解决方案


该错误试图说明的是您无法将集合转换为整数。我假设错误是由于teacher = models.ArrayReferenceField(to=Teacher)你的这个字段引起的,它的返回类型是set(). 您可以从集合中获取索引并将其转换为整数:

a = set({1,2,3,4})
int(a.pop())

如果您尝试将整个集合转换为整数,请先将它们合并,然后再转换为整数。

x = set({'1', '2', '3', ''4})
y = ''.join(x) # converting set into string
z = int(y)

如上所述,请确保您没有返回嵌套列表。

这是被强制转换int()并引发错误的地方:

File "C:\Program Files\Python36\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
    return int(value)

推荐阅读