如何在wtf flask表单中发送隐藏字段用于数据库插入

时间:2014-05-04 17:14:57

标签: python flask jinja2 flask-sqlalchemy flask-wtforms

如何以wtf格式指定多个数据库字段,这样我就可以正确地在数据库中插入一行。我在模板中需要这样的东西

        {{ wtf.form_field(gform.GHF(value="{{ project.name }}")) }}

因为我正在迭代一个(项目)到多个(目标)
项目 - (有很多目标)
-goal -

我的目标表单多次显示。

{% 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 个答案:

答案 0 :(得分: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(...)

我正在跳过表单创建,重定向和render_template调用中的详细信息,但这应该可以解决这个问题。每个目标表单的操作都指向根据项目ID构建的路由。

您可以对此进行扩展以允许编辑目标,并且您也可以通过一些不错的ajax帖子使其更好。