具有多个相同行的表格

Form with multiple identical lines

我正在编写一个 Flask 应用程序,用户必须在其中输入他们计划在一个学期内学习的所有大学课程。所需数据是一个代码(例如 'CMPT')和一个数字(例如“101”)。

我希望用户能够输入 最多 10 门课程。我想通过重用我创建的 CourseForm 来做到这一点,而不是为每门课程手动创建字段。我尝试使用 FieldListFormField 创建一个使用 CourseForm 的新表单,但我无法正确显示它。

如何创建包含 10 个课程空位的表格?

class CourseForm(Form):
    code = SelectField('Course Code', choices=CHOICES)
    number = IntegerField('Course Number')

@app.route(...)
def index():
    form = CourseForm()
    return render_template('main.html', title='Main', form=form)

main.html:

...
<form action="" method="post" name="course">
    {{ form.hidden_tag() }}
    <p>{{ form.code() }} {{ form.number() }}</p>
    <p><input type="submit" value="Submit"></p>
</form>
...

您在 FieldListFormField 的正确轨道上。

从你的CourseForm开始。

class CourseForm(Form):
    code = SelectField('Course Code', choices=CHOICES)
    number = IntegerField('Course Number')

然后您需要将其封装在另一个表单中。为了这个例子,我将其称为 RegisteredCoursesForm。您可以使用 max_entries 将条目数限制为 10。如果您始终希望 10 个条目可用,即使它们不会全部填写,您也可以包括 min_entries.

class RegisteredCoursesForm(Form):
    courses = FieldList(FormField(CourseForm), min_entries=10, max_entries=10)
    # Any other fields can go here (e.g., user_id).

您需要将此新表单传递给您的模板而不是 CourseForm

def index():
    form = RegisteredCoursesForm()
    return render_template('main.html', title='Main', form=form)

最后,您可以遍历 courses 字段以获取不含 CourseForm 的所有字段。

<form action="" method="post" name="course">
    {{ form.hidden_tag() }}
    {% for course_form in form.courses %}
        <p>{{ course_form.code }} {{ course_form.number }}</p>
    {% endfor %}
    <p><input type="submit" value="Submit"></p>
</form>