如何在WTF Flask表单中发送隐藏字段以插入数据库
我该如何在一个WTF表单中指定多个数据库字段,以便能正确地在数据库中插入一行数据呢?我需要在我的模板中有这样的东西:
{{ wtf.form_field(gform.GHF(value="{{ project.name }}")) }}
因为我正在处理一个(项目)到多个(目标)的关系
项目 -(有多个目标)
-目标-
而我的目标表单会显示多次。
{% for project in P %}
{% for pgoal in project.goals.all() %}
<li>
Goal: {{ pgoal.goal }}<br>
{% if loop.last %}
<form class="form form-horizontal" method="post" role="gform">
{{ gform.hidden_tag() }}
{{ wtf.form_errors(gform) }}
{{ wtf.form_field(gform.goal) }}
Help here? do i need a hiddenfield to know which project?
{{ wtf.form_field(gform.submit) }}<br>
and so on...
一旦我找到了正确的项目,我会在这里的视图中使用它。
u=models.Projects.query.get(correct project?)
p=models.Goals(goal=gform.goal.data,proj=u)
1 个回答
2
我不会用隐藏字段来处理这个问题。我会让每个表单的提交方式稍微不同一些。
你应该有类似这样的东西:
<form class="form form-horizontal" method="post" role="gform"
action="{{ url_for('add_goal_to_project', project_id=project.id) }}">
而这个路由应该是:
@app.route('.../<int:project_id>', methods=['POST'])
def add_goal_to_project(project_id):
gform = GForm(....)
if gform.validate_on_submit():
project = models.Projects.query.get(project_id)
goal = models.Goals(gform.goal.data, proj=project)
# Do anything else you need to do, such as adding and committing
# the new object
return redirect(...)
return render_template(...)
我省略了一些关于表单创建、重定向和渲染模板的细节,但这样应该能让你明白大概意思。每个目标表单的动作指向一个由项目ID构建的路由。
你可以扩展这个功能,让用户能够编辑目标,如果再加上一些不错的ajax请求,效果会更好。