为了账号安全,请及时绑定邮箱和手机立即绑定

Flask 在第一次验证时不知道动态添加的输入字段

Flask 在第一次验证时不知道动态添加的输入字段

精慕HU 2023-05-23 16:27:46
如果用户单击它,我将通过按钮动态添加新的文件上传字段。验证仅在每隔一次尝试时通过,这是因为 flask/wtforms 不知道新的动态创建的输入字段。每当我单击我的提交按钮时,它只会对文件丢失的第一个字段发出警告。一旦我放入所有必需的文件并提交,它在第一次尝试时就失败了,但之后字段列表已被初始化为所需的大小,并且在我下次提交相同数量的文件时它可以工作。forms.pyclass ChildForm(FlaskForm):    class Meta:        csrf = False    childvalue1= IntegerField(default=1, validators=[DataRequired()])    childvalue2= FileField(validators=[FileRequired(),FileAllowed(['mp3'])])class ParentForm(FlaskForm):    parentvalue1= FileField('PDF File', validators=[FileRequired(), FileAllowed(['pdf'])])    parentfieldlist= FieldList(FormField(ChildForm), min_entries=1)    submit = SubmitField('Upload')html文件<form action="" method="post" enctype="multipart/form-data">        {{ form.hidden_tag() }}        <!-- PDF Upload -->        <div>            <label class="label">{{ form.parentvalue1.label }}</label>            {{ form.parentvalue1}}            <br>        </div>        <!-- Audio Upload -->        <br>        <div>            <label class="label">{{ form.parentfieldlist.label }}</label>            <table id="audiotable">                {% for entry in form.parentfieldlist%}                <tr>                    {% for subfield in entry %}                    <td>{{ subfield }}</td>                    {% endfor %}                </tr>                {% endfor %}            </table>        </div>        <br>        <button type='button' class="add_more">Add More Files</button>        <br><br>        <p> {{ form.submit(class='button is-link') }}    </form>任何人碰巧知道如何让它工作?另一个例子。如果我添加第二个上传字段并提交,这就是我的函数打印的内容:[{'childvalue1': 1, 'childvalue2': <FileStorage: 'somefile.mp3' ('audio/mpeg')>}, {'childvalue1': 2, 'childvalue2': None}]如果我再做一次并提交,它就会起作用。有一些使用 append_entry() 的 python 函数的 ajax 调用的 hacky 解决方案,但我不相信这些并且不确定它们是否真的解决了问题。本质上,文件在第一次提交时总是没有
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

答案非常简单,但对我来说并不那么明显。

<input type='file' id=${secondTag } name=${secondTag }/>

需要像这样,就像第一个子值一样,我输入它是因为它有一个默认值

<input type='file' id=${secondTag } name=${secondTag } value=""/>

现在 Flask 在提交/验证时识别动态添加的文件。从一开始就应该很明显,因为第一个值一直在传输,但是第二个值是“无”,两者之间唯一的区别是“值”


查看完整回答
反对 回复 2023-05-23
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信