Как отправить скрытое поле в форме фляги wtf для вставки в базу данных

Как указать множество полей базы данных в форме 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)

person Chet Meinzer    schedule 04.05.2014    source источник


Ответы (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, но это должно донести идею. Действие каждой формы цели указывает на маршрут, построенный на основе идентификатора проекта.

Вы можете расширить это, чтобы разрешить редактирование целей, и вы сможете сделать это намного лучше с помощью некоторых хороших сообщений ajax.

person Eric Workman    schedule 09.05.2014
comment
согласовано. На самом деле, это очень похоже на то, что я сделал, но мне нравится, как вы сделали это лучше. - person Chet Meinzer; 09.05.2014