我有一个数组数组。每个嵌套数组都包含有关学生的信息。然后,我对其进行迭代,并将每个数组保存到一个学生对象中,并将其持久保存到我的数据库中。
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:错字
答案 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))