我想动态地使用min_entries WTForms参数,即没有硬编码数字。
在form.py中看起来像这样:
class TestSpecForm(FlaskForm):
student_number = IntegerField('Number of Students')
class StudentForm(FlaskForm):
answer = StringField('')
class TestInputForm(FlaskForm):
students = FieldList(FormField(StudentForm)) # I'd like to insert the dynamic min_entries here
submit = SubmitField('Submit')
在views.py中有类似的东西:
def input(key_id):
key = Testspecs.query.get_or_404(key_id)
student_number = key.student_number
form = TestInputForm()
form.students.min_entries = student_number
if form.validate_on_submit():
...
但是,这不起作用,只为TestInputForm呈现NO FIELDS。如果我将“min_entries = 10”放入TestInputForm的students变量中,一切都按预期工作。但我无法动态完成它。
有人可以帮帮我吗?根据我的所有google / reddit / SO搜索,这基本上是WTForms中大多数参数或验证器动态设置的方式。
谢谢
无法动态覆盖min_entries
上的FieldList
。
解决方法是子类化表单并绑定一个具有所需值的新FieldList
。
所以你的代码必须看起来像这样:
def input(key_id):
key = Testspecs.query.get_or_404(key_id)
student_number = key.student_number
# Subclass form and bind new field
class LocalForm(TestInputForm):pass
LocalForm.students = FieldList(FormField(StudentForm), min_entries=student_number)
# Use our new form
form = LocalForm()
if form.validate_on_submit():
...