Вот форма с полевым списком, вложенным в другой полевой список.
Цель состоит в том, чтобы создать форму, подобную Excel.
Существует одна строка на город и один столбец на дату (города и даты являются динамическими списками).
Я добавляю даты в город, а затем добавляю города к основной форме.
Форма загружается как ожидалось:
Но после передачи это выглядит так:
Как я могу сохранить второе добавление после отправки?
Вот мой файл 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>