我学习使用瓶,神社,WTForms语言创建测验样的Web应用程序,SQLAlchemy的等一旦用户通过存储在所有级别成功完成去这样的语言课程JSON文件我希望应用程序为他提供练习模式,用户将在其中回答随机选择的级别。validate_on_submit()失败时,单选按钮选择是动态生成
当我运行应用程序,我可以看到从随机水平值产生的,因为我想单选按钮,但是当我选择任何答案并提交,form.validate_on_submit()返回False和form.errors返回{ 'practiceform':[u'Not一个有效的选择']}。当我将值硬编码为currentLevel变量时,它可以正常工作。
views.py
@user_blueprint.route('/courses/<course>/quiz/practice',methods=['GET','POST'])
@login_required
def practice(course):
courseClass = class_for_name("project.models", course.capitalize())
courses = courseClass.query.filter_by(email=current_user.email).first()
maxLevel = courseClass.query.filter_by(email=current_user.email).first().get_maxLevel()
currentLevel = randint(0, maxLevel-1) # If this value is hard-coded or fetched from db, it works correctly
dic = generateQuestion(course, currentLevel)
display = dic["display"]
correct = dic["correct"]
options = dic["options"]
form = PracticeForm(request.form)
form.practiceform.choices = [(option, option) for option in options]
if form.validate_on_submit():
practiceForm = form.practiceform.data
if ((practiceForm == correct) and courses):
# Do something
flash("Nice job", 'success')
return redirect(url_for('user.practice', course=course))
else:
# Do something else
flash("Wrong answer", 'danger')
return redirect(url_for('user.practice', course=course))
return render_template('courses/practice.html', form=form, display=display)
forms.py
class PracticeForm(Form):
practiceform = RadioField('practice')
practice.html
{% extends "_base.html" %}
{% block content %}
<form action='' method='POST' role='form'>
<p>
<!-- Tried put form.csrf, form.csrf_token, form.hidden_tag() here -->
{{ form.practiceform() }}
</p>
<input type="submit" value="submit" />
</form>
{% endblock %}
那么,要我想念那里?是什么让差异可以说,硬编码的25级,其工作正常,或25号randint内随机生成的?