Вопрос

How do i do specify the many database field when in a wtf form, so i can insert a row in the database correctly. I need something like this in my template

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

because I'm iterating over one (Projects) to many (Goals)
Project-(has many goals)
-goal-

and my goal form shows up multiple times.

{% 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...

Once I have the correct project, I will use it in my view here

    u=models.Projects.query.get(correct project?)
    p=models.Goals(goal=gform.goal.data,proj=u)
Это было полезно?

Решение

I wouldn't do it with a hidden field. I'd make each form submit a little differently.

You should have something like

<form class="form form-horizontal" method="post" role="gform" 
 action="{{ url_for('add_goal_to_project', project_id=project.id) }}">

And the route would be

@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(...)

I'm skipping the details in the form creation, redirect and render_template calls, but this should get the idea across. Each goal form's action points to a route built from the project id.

You could extend this to allow for the editing of goals, and you'd be able to make it a lot better with some nice ajax posts as well.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top