【问题标题】:How to send hiddenfield in wtf flask form for database insert如何以 wtf 烧瓶形式发送隐藏字段以进行数据库插入
【发布时间】:2014-05-04 17:14:57
【问题描述】:

我如何在 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)

【问题讨论】:

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


    【解决方案1】:

    我不会用隐藏字段来做。我会让每个表单提交的方式有所不同。

    你应该有类似的东西

    <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 帖子使其变得更好。

    【讨论】:

    • 同意。事实上,这与我所做的非常相似,但我喜欢你做得更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多