Flask - вложенный FieldList некорректно отправляется - PullRequest
0 голосов
/ 03 июня 2019

Вот форма с полевым списком, вложенным в другой полевой список. Цель состоит в том, чтобы создать форму, подобную Excel.

Существует одна строка на город и один столбец на дату (города и даты являются динамическими списками).

Я добавляю даты в город, а затем добавляю города к основной форме.

Форма загружается как ожидалось:

enter image description here

Но после передачи это выглядит так:

enter image description here

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

Вот мой файл py:

from flask import Flask
from flask import Flask, flash, redirect, render_template, request, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, FieldList, FormField, SubmitField


app = Flask(__name__)
app.config['SECRET_KEY'] = 'key'


class DateForm(FlaskForm):
    class Meta:
        csrf = False
    date = StringField('date')

class CityForm(FlaskForm):
    class Meta:
        csrf = False
    city = StringField('city')
    dates = FieldList(FormField(DateForm))

class MainForm(FlaskForm):
    cities = FieldList(FormField(CityForm))
    submit = SubmitField('Save')


@app.route('/', methods=['GET','POST'])
def home():

    cities = ['NY', 'LA']
    dates = ["2018", "2019"]

    form = MainForm()

    if form.validate_on_submit():
        flash("validated on submit !", "alert alert-danger")
        redirect(url_for('home'))

    for c in cities:
        city = CityForm()
        city.city = c

        for d in dates:
            date = DateForm()
            date.date = d
            city.dates.append_entry(date)

        form.cities.append_entry(city)

    return render_template('template.html', form = form )

if __name__ == "__main__":
    app.run(host="127.0.0.1", port="5000" ,debug=True)

А вот мой HTML-шаблон:

<html>
    <head>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
    </head>
    <body>
      <div class="container-fluid">

        <div class="row">
          <div class="col-sm-6 offset-sm-3 p-0">
            <form method="POST"  action="{{ url_for('home')}}">
              {{ form.hidden_tag() }}
              <div class="form-group">
                <table>
                  {% for c in form.cities %}
                    <tr>
                      <td>{{ c.city }}</td>

                      {% for d in c.dates %}
                      <td>{{ d.date.data }}</td>
                      {% endfor %}
                    </tr>
                  {% endfor %}
                </table>
              </div>
              <div class="form-group">
                  {{ form.submit(class="btn btn-secondary") }}
              </div>
            </form>
          </div>
        </div>

        <div class="row">
          <div class="col-sm-6 offset-sm-3 p-0">
            {% with messages = get_flashed_messages(with_categories=true) %}
              {% if messages %}
                {% for category, message in messages %}
                  <p class="{{ category }}">{{ message }}</p>
                {% endfor %}
              {% endif %}
            {% endwith %}
          </div>
        </div>

      </div>
    </body>
</html>

1 Ответ

1 голос
/ 04 июня 2019

Согласно комментариям - отсутствует возврат:

return redirect(url_for('home'))
...