首页 > 解决方案 > 在我的表单中使用 MultipleFileField() 时,FileRequiredValidator() 不起作用

问题描述

我的 UploadForm 类:

    from app import app
    from flask_wtf.file import FileRequired, FileAllowed
    from wtforms.fields import MultipleFileField
    from wtforms.validators import InputRequired,DataRequired
  class UploadForm(FlaskForm):
     .
     .
     .
     roomImage = MultipleFileField('Room',validators=[FileAllowed(['jpg', 'png'], 'Image only!'), FileRequired('File was empty!')] )
     .
     .
     .#there are other fields here which are  not relevant to  the problem at hand

HTML 模板

{% extends "base.html" %}

{% block content %}
 <h1>Upload Your Images</h1>
<form  action="/" enctype="multipart/form-data" method="post"  >
    {{ form.csrf_token }}
    Room<br />
    {{form.roomImage()}}
    .
    .
    . <MORE THINGS THAT I HAVE EDITED OUT>
    {{form.submit()}}
    <br/>
    {% if form.errors %}
      {{ form.errors }}
    {% endif %}
</form>
{% endblock %}

hosts.py 运行验证检查

def upload_image():#NEEDS HEAVY FIXING
    """home page to return the web page to upload documents"""
    form = UploadForm()
    if form.validate_on_submit():

使用 VS 的调试工具,我发现 form.validate_on_submit() 不起作用并且总是验证失败,并且我在我的 html 页面上收到此错误。

{'roomImage': ['文件为空!']}

还有另一个 MultipleFileField 控件,其代码几乎完全相同。当我使用 FileField 上传一个文件时,不会发生此问题。这方面的文档非常有限,我所要做的就是这个。我真的不知道如何解决这个问题。我已经广泛搜索以查找涉及 MultipleFileField 的示例,但它们没有使用任何验证。我在 Github 上找不到的一个线程建议使用 OptionalValidator,但这对我来说不是一个选项,甚至没有用。有人可以建议我一个解决方案吗?

编辑:

甚至 FileAllowed() 验证器似乎也不起作用。

标签: pythonpython-3.xvalidationflaskwtforms

解决方案


这对我有用(在 GitHub 上的“字里行间”中找到):

multi_file = MultipleFileField("Upload File(s)", validators=[DataRequired()])

然而

FileAllowed(["xml", "jpg"])

被忽略,对我不起作用。

编辑:不,可悲的是,它不起作用......它返回 True forform.validate()和 forform.validate_on_submit()但是当你没有传递任何文件时,通过删除

required=""

<input id="multi_file" multiple="" name="multi_file" required="" type="file">

并提交一个表单,它仍然将其评估为 True。

所以问题仍然存在,如所述......


推荐阅读