python - WTF form.validate_on_submit() 在更新表单时不起作用
问题描述
我设计了一个表格来更新任务。该表单会将任务的详细信息放入更新表单中,并且在提交该表单时form.validate_on_submit
不起作用并再次重定向到具有先前值的相同表单。这是我的路线和模板代码。我用过{{ form.csrf_token }}
。但类似的逻辑适用于 newTask 路由。
更新路线
@main.route('/update/<int:id>',methods=['POST','GET'])
@login_required
def update(id):
if form.validate_on_submit():
t.task_name = form.task_name.data
t.assignee = form.assignee.data
t.deal_size = form.deal_size.data
t.lead_status = form.lead_status.data
t.stage = form.stage.data
t.priority = form.priority.data
t.submission_date = form.date.data
db.session.add(t)
db.session.commit()
return redirect('/')
form = NewTaskForm()
t = Tasks.query.get_or_404(id)
return render_template("update.html",form = form , t = t)
更新.html
<form method="POST" action="/update/{{ t.id }}">
{{ form.csrf_token }}
<div class="form-group">
{{ form.task_name.label }}{{ form.task_name(class='form-control',value = t.task_name ) }}
{% if form.task_name.errors %}
{% for error in form.task_name.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="form-group">
{{ form.assignee.label }}{{ form.assignee(class='form-control',value = t.assignee) }}
{% if form.assignee.errors %}
{% for error in form.assignee.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="form-group">
{{ form.deal_size.label }}{{ form.deal_size(class='form-control',value = t.deal_size) }}
{% if form.deal_size.errors %}
{% for error in form.deal_size.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="form-group">
{{ form.lead_status.label }}{{ form.lead_status(class='form-control',value = t.lead_status) }}
{% if form.lead_status.errors %}
{% for error in form.lead_status.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="form-check padding-none">
{{ form.stage.label(class='form-check-label') }}{{ form.stage(class='form-check-input customRadio',value = t.stage.data) }}
{% if form.stage.errors %}
{% for error in form.stage.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="form-group">
{{ form.date.label }}{{ form.date(class='form-control',value = t.submission_date.date()) }}
{% if form.date.errors %}
{% for error in form.date.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
{% endif %}
</div>
{{ form.submit(class="btn btn-outline-primary btn-block") }}
</form>
新任务路线
@main.route('/new-task',methods=['POST','GET'])
@login_required
def newTask():
form = NewTaskForm()
if form.validate_on_submit():
t = Tasks()
t.task_name = form.task_name.data
t.assignee = form.assignee.data
t.deal_size = form.deal_size.data
t.lead_status = form.lead_status.data
t.stage = form.stage.data
t.priority = form.priority.data
t.submission_date = form.date.data
db.session.add(t)
db.session.commit()
return redirect('/')
return render_template("newtask.html",form = form)
解决方案
如果要将用户重定向到新表单,请使用:
@main.route('/update/<int:id>',methods=['POST','GET'])
@login_required
def update(id):
if form.validate_on_submit():
# do something and then redirect
return redirect(url_for('confirm'))
return render_template("update.html",form = form , t = t)
如果您还没有完成,您可能需要为“确认站点”创建一个新功能。如果您想更好地了解 url_for ,可以查看烧瓶文档:
它接受函数的名称作为其第一个参数和任意数量的关键字参数,每个关键字参数对应于 URL 规则的可变部分。未知的可变部分作为查询参数附加到 URL。
在这里您也可以找到一个很好的解释: create-dynamic-urls-in-flask
推荐阅读
- facebook-graph-api - user_friends - 根据开发者设置的配置,不允许用户查看此应用程序
- html - 如何在一行列中对齐按钮
- git - Git&ApartCI - 如何在邀请功能破坏之前验证代码冲突?
- r - R 时间序列数据集。将新数据与旧数据合并,就像 timestamp_new >= Timestamp_old 并且如果 ID_new > ID_old 然后合并新数据
- android - Gradle错误无法解决:com.github.Binary-Finery:Bungee:master-SNAPSHOT
- assembly - 如果标志 EQ 不 = 1,是否执行 BEQ 之后的部分
- javascript - nodejs 编写同步函数,例如 fs.readFileSync
- database - 监视文件更改不适用于带有 systemd 的数据库文件
- python - Python(带有 Tweetpy)通过推文存档并执行每个操作
- python - 如何在python中为列表内的列表绘制图形