У меня небольшая проблема с этим. Вот обзор того, что я создал: простая форма с 2 полями выбора, 1 полем загрузки файла и кнопкой отправки. Первый выбор извлечет свои варианты из базы данных sql (у меня это закончилось). Затем, основываясь на том, что пользователь выбирает из SelectField1, SelectField2 будет заполнять его результатами из базы данных SQL. Я бы хотел, чтобы это произошло при выборе в номере 1. Другими словами, пусть selectfield2 динамически обновляет/заполняет себя без обновления страницы.
Рабочий процесс будет выглядеть примерно так:
- Выберите имя клиента из SelectField1 (получите список планов клиентов, извлеченных из sql на основе выбора. Заполните SelectField2 ими, не обновляя страницу.)
- Выберите один из планов клиентов в SelectField2.
- Загрузите соответствующий pdf, используя
- FileField
- кнопка отправки
Может кто-то указать мне верное направление? Я работаю над этим дома на выходных, поэтому у меня нет подключения к базе данных. Я создал 3 списка для тестирования.
Я пытался сделать что-то вроде:
if form.sf_baclient.data == 'py':
form.sf_clientplan.choices = list2
else:
form.sf_clientplan.choices = list3
но это не сделало живое обновление. Вот код для html и представления:
HTML
<form action="{{ url_for('index') }}" method=post>
{{ form.hidden_tag() }}
<dl>
{{ form.sf_baclient.label }}<br>
{{ form.sf_baclient }}<br>
{{ form.sf_clientplan.label }}<br>
{{ form.sf_clientplan }}<br>
{{ form.ff_pdf_upload.label }}<br>
{{ form.ff_pdf_upload }}<br>
</dl>
{{ form.sb_submit }}
</form>
Вид
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm(request.form)
list1 = [('cpp', 'C++'), ('py', 'Python'), ('text', 'Plain Text')]
list2 = [('1', 'One'), ('2', 'Two'), ('3', 'Three')]
list3 = [('blue', 'Blue'), ('red', 'Red'), ('green', 'Green')]
form.sf_baclient.choices = list1
form.sf_baclient.choices.insert(0, ('', ''))
form.sf_clientplan.choices = list3
form.sf_clientplan.choices.insert(0, ('', ''))
if request.method == 'GET':
return render_template('home.html', form=form)
elif request.method == 'POST':
if form.sb_submit.data == True:
message = form.sf_baclient.data
# flash(message)
return render_template('home.html', form=form, success=True)