WTForms / Flask:动态min_entries

问题描述 投票:0回答:1

我想动态地使用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中大多数参数或验证器动态设置的方式。

谢谢

python flask dynamic parameters wtforms
1个回答
0
投票

无法动态覆盖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():
        ...
© www.soinside.com 2019 - 2024. All rights reserved.