我正在尝试通过从表中检索信息来动态更新表单,然后显示SelectField中的一个列。当我输入资产标签时,选择一个任务标题并点击提交,没有任何反应。
编辑:我应该添加表单正在更新 - 我的所有选择都在那里并成功检索。在此之后,它根本就不执行我的任何视图功能。
我的表格如下;
class AssignTasksForm(Form):
asset_tag = StringField('asset_tag', validators=[DataRequired()])
task_title = SelectField('task_title', validators=[DataRequired()])
我的观点功能;
@tasks_blueprint.route('/assign_tasks', methods=['GET', 'POST'])
@login_required
def assign_tasks():
form = AssignTasksForm()
form.task_title.choices = [(tc.task_id, tc.task_title) for tc in Tasks.query.order_by('task_id')]
if request.method == 'POST':
if form.validate_on_submit():
try:
asset_tag = form.asset_tag.data
asset = Motor.query.filter_by(asset_tag = asset_tag).first_or_404()
task_title = form.task_title.data
task = Tasks.query.filter_by(task_title = task_title).first_or_404()
task.asset_tasks.append(asset)
db.session.commit()
except Exception as e:
flash(e)
db.session.rollback()
return render_template('assign_tasks.html', form=form)
我的终端输出让我相信在从表中检索数据后表单可能会失效:
2016-08-17 18:21:56,568 INFO sqlalchemy.engine.base.Engine {'id_1': 1, 'param_1': 1}
2016-08-17 18:21:56,577 INFO sqlalchemy.engine.base.Engine SELECT tasks."Task Title" AS "tasks_Task Title", tasks."Description" AS "tasks_Description", tasks.task_id AS tasks_task_id
FROM tasks ORDER BY tasks.task_id
2016-08-17 18:21:56,577 INFO sqlalchemy.engine.base.Engine {}
108.168.36.217 - - [17/Aug/2016 18:21:56] "POST /tasks/assign_tasks HTTP/1.1" 200 -
您可以看到它运行视图中列出的查询,然后发布网页,但它不会继续执行其余的视图功能。
这是我的模板:
{% extends "basehead.html" %}
{% block content %}
<center>
<div class="container">
<h2>Assign Tasks Below</h2>
<br>
<form action="" method="post" name="submit">
{{ form.hidden_tag() }}
<p>
{{ form.asset_tag(placeholder=" Enter Asset Tag") }}
</p>
<p>
{{ form.task_title }}
</p>
<input class="btn btn-default" type="submit" value="Submit">
</form>
</div>
{% if result_message %}
<br>
<p class="result_message"> {{ result_message }} </p>
</br>
{% endif %}
</center>
{% endblock %}
答案 0 :(得分:1)
尝试以下方法。 http://hastebin.com/obojivosar.py
您无需检查if request.method == "POST":
我只是将选项的填充移动到视图的底部。我从未在validate_on_submit
之前触摸表单。result_message
如何进入模板的上下文?
答案 1 :(得分:0)
我发现了这个问题,
WTForms希望将查询中返回的数据作为字符串处理,但ID(整数)显然不是字符串,这必然是验证失败的原因。
通过在我的表单定义中向/^\(0[236789]\)\s(\d){8}$/
对象添加coerce=int
,WTForms现在知道将其作为int处理并通过验证。
固定代码:
task_title