TypeError:字段“教室”需要一个数字,但得到了(4,)

时间:2020-06-22 20:50:27

标签: python python-3.x django django-models

我有一个数组数组。每个嵌套数组都包含有关学生的信息。然后,我对其进行迭代,并将每个数组保存到一个学生对象中,并将其持久保存到我的数据库中。

students = [
    ["James", "Smith", 4, 10],
    # more students here
]

for s in students:
    student = Student()
    student.first_name = s[0],
    student.last_name = s[1],
    student.classroom = s[2],
    student.grade1 = s[3],
    student.save()

classroom类中的字段Student被定义为FloatField

我遇到以下错误:

TypeError:字段“教室”需要一个数字,但得到了(4,)。

这可能是什么原因?

编辑1:错字

3 个答案:

答案 0 :(得分:2)

结尾的逗号创建元组。

student.first_name = s[0],

应该是

student.first_name = s[0]

您可以在此处详细了解该奇怪的语法- https://docs.python.org/3.3/tutorial/datastructures.html#tuples-and-sequences

一个特殊的问题是包含0或1的元组的构造 项目:语法有一些额外的怪癖可容纳这些怪癖。空的 元组由一对空括号构成;一个元组 一项是通过在值后面加上逗号来构造的(不是 足以将单个值括在括号中)。丑陋的,但是 有效。

答案 1 :(得分:1)

就像@match所说的那样,设置变量的值时要用逗号结尾。删除那些,你应该很好。例如:

student.first_name = s[0]
student.last_name = s[1]
student.classroom = s[2]
student.grade1 = s[3]
student.save()

在设置变量之间没有逗号。

答案 2 :(得分:0)

我已经编辑了您的代码,但我认为您的意思是要做这样的事情:

s = [
    ["James", "Smith", 4, 10],
    # more students here
]

class Student:
 
    def __init__(self,first_name,last_name,classroom,grade):
        """ Create a new point at the origin """
        self.first_name = first_name
        self.last_name = last_name
        self.classroom = classroom
        self.grade = grade


student = Student(s[0][0],s[0][1],s[0][2],s[0][3])

from pprint import pprint
pprint(vars(student))