【发布时间】:2016-12-24 18:35:04
【问题描述】:
我试图通过从表中检索信息来动态更新表单,然后在 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 %}
【问题讨论】:
-
您可以在validate_on_submit之后打印表单数据,查看您的表单内容。
-
@EmL 好的,我在
if request.method == 'POST':之后添加了flash(form.task_title.choices),它成功地刷新了从查询中检索到的所有选项。所以我怀疑有些东西阻止它被验证_on_submit。 -
尝试在 validate_on_submit() 函数处设置断点,并进行调试。或者将
SelectField替换为QuerySelectField,我在需要动态字段时使用QuerySelectField。
标签: python flask sqlalchemy flask-wtforms