无法在Flask-wtf中多次添加entry FieldList

6 投票
1 回答
4796 浏览
提问于 2025-04-17 09:02

我有一个用flask-wtf做的表单,用来上传图片,而且这个表单的文件字段可以有多个。

我的表单是:

class ComposeForm(Form):
    attachment = FieldList(FileField(_('file')), _('attachment'))
    add_upload = SubmitField(_('Add upload'))

我的视图是:

if form.validate_on_submit():
    if form.add_upload.data:
        form.attachment.append_entry()
        return render_template('mailbox/compose.html', form=form)
    else:
        form.attachment.append_entry()

我的模板是:

<form method="POST" enctype="multipart/form-data" action=".">
     {% for field in form %}
         {{field}}
     {% endfor %}
</div>

当我在表单中使用 enctype="multipart/form-data" 时,append_entry 这个功能就不管用了。它只会再添加一个字段。
我再次点击 add_upload,但是刷新后我又只看到一个字段(而不是两个)。

我该怎么解决这个问题呢?我觉得没有错误,因为enctype让wtform忘记了我需要添加多少个字段。

1 个回答

4

你调用的 append_entry 方法缺少数据。

根据文档

append_entry([data])

这个方法可以创建一个新的条目,并且可以选择性地提供默认数据。

不过,通过这种方式添加的条目不会接收到表单数据,只能接收对象数据。

如果你想获取表单中提交的数据,可以试试使用 pop_entry。或者至少可以进行一些调试,看看 form.attachment.entries 的内容是什么样的。里面有值吗?当你遍历这些值时会发生什么?

撰写回答