Flask WTForms HiddenInput 值未发送到应用程序

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

所以,这是我在 Stack Overflow 上的第一个问题。 请客气点..

我尝试使用 IntegerField 作为 HiddenInput,但是当我提交表单时,该字段的值不会发送到我的应用程序。 (当我调试时,该值是“”),但我可以看到通过开发工具在页面本身上设置了正确的值。

如果我删除 widget=HiddenInput(),它就可以正常工作。 我确信有一些明显可笑的原因,但我一直找不到它。

班级:

class RemoveTimeslot(FlaskForm):
    ts_id = IntegerField(widget=HiddenInput())
    remove = SubmitField('Remove')

从角度来看:

slot = Timeslot.query.filter_by(id=rem_form.ts_id.data).first()
    if slot:
        db.session.delete(slot)
        db.session.commit()
        flash('Timeslot Removed!')
        return redirect(url_for('admin.timeslots'))
    else:
        flash('Failed to remove timeslot!', 'warning')

来自模板: '''

{% for slot in slots %}
<tr>
    <td>{{slot.start.isoformat(timespec='minutes')}}</td>
    <td>{{slot.end.isoformat(timespec='minutes')}}</td>
    <td>{{slot.duration}} Minutes</td>
    <td>
        <form method="POST" action="">
            {{ rem_form.hidden_tag() }}
            {{ rem_form.remove(class="btn btn-dark") }}
            {{ rem_form.ts_id(value=slot.id) }}
        </form>
    </td>
</tr>
{% endfor %}

如有任何帮助,我们将不胜感激!

html forms flask flask-sqlalchemy flask-wtforms
2个回答
1
投票

我终于能够通过在模板中添加

type="hidden"
来使其正常工作。在类本身中,我将其保留为
ts_id = IntegerField()
,但是当我在模板中创建该字段时,我将其更改为
{{ rem_form.ts_id(value=slot.id, type="hidden") }}
,这样就成功了! 我不知道为什么一个的工作方式与另一个不同...如果您有任何想法,请告诉我!


0
投票

我遇到了同样的问题,经过几个小时后我找到了原因。 HiddenFields 未接收从模板传递的值的原因是当您在

之后有隐藏表单字段时
{{ form.hidden_tag() }}

如果您在此标签之前添加隐藏字段,那么它就可以正常工作!

这是一个例子:

<form method="POST" action="">
  {{ form.vehical_id(class="form-control", id="vehicalId") }}
  {{ form.hidden_tag() }}
  <fieldset class="form-group">
    <div class="form-group position-relative">
      {{ form.vehical.label(class="form-label mt-3", for="vehicalSearch") }}
      {{ form.vehical(class="form-control", id="vehicalSearch", placeholder="Search Vehical...", autocomplete="off") }}
    </div>
  </fieldset>
</form>                            

© www.soinside.com 2019 - 2024. All rights reserved.