创建一个简单的学生CRUD数据库我无法获得“添加学生”的功能。上班。目前它产生了 - " TypeError:' NoneType'对象不可迭代"。
**编辑:我发现这是因为使用外部查找表来实现' SelectField' '选择&#39 ;.最好的答案解释了如何通过正确地分解选择来解决这个问题'关键,价值'数据到外部模块将被标记为答案。谢谢您的帮助。 **
我的表格......
class AddStudent(FlaskForm):
gender = SelectField('Gender :', choices=lookup.GENDER)
我的查找文件' lookup.py' ...
GENDER = [('男','男'),'女''女')
以下是追溯......
builtins.TypeError
TypeError: 'NoneType' object is not iterable
File "/Users/inyoka/Documents/dev/study/app/stud/views.py", line 16, in add
if form.validate_on_submit():
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/flask_wtf/form.py", line 101, in validate_on_submit
return self.is_submitted() and self.validate()
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/wtforms/form.py", line 310, in validate
return super(Form, self).validate(extra)
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/wtforms/form.py", line 152, in validate
if not field.validate(self, extra):
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/wtforms/fields/core.py", line 193, in validate
self.pre_validate(form)
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/wtforms/fields/core.py", line 468, in pre_validate
for v, _ in self.choices:
TypeError: 'NoneType' object is not iterable
答案 0 :(得分:0)
使用'choices ='将值导入SelectField时,生成器需要生成值。
例如,在我的表格中我会...
from .lookup import *
goal = SelectField('Professional Goal :', choices=Lookup(GOALS))
需要在lookup.py中找到以下内容...
class Lookup:
def __init__(self, items):
self.items = items
def __iter__(self):
for item in self.items:
yield(item)
# List of choices to yield
GOALS = [('none', 'None'),
('TOEFL', 'TOEFL'),
('IELTS','IELTS'),
('iGCSE','iGCSE')]
如果您有很多选择要查找,这是值得的。
有关发电机的更多信息,我发现了这个介绍......
答案 1 :(得分:-1)
在您的视图代码中,您使用form = AddStudent(request.form)
创建表单。这会给你一个空的学生表格。要使用form
中的请求数据填充表单中的数据。这将使用您请求中的数据填充var htmlStr
for(var i=0;i<data.length;i++){
htmlStr += "<input class='my_button' type='button' data-value='"
+ data[i].value + "' value='" + data[i].value + "'/>";
}
$("#keyvals").html(htmlStr);
$('.my_button').click(function(){
alert(this.data-value);
});
。