@Atroshchenko-Dima
Python, postgres

Как сохранить выбранные пользователем параметры в выпадающем списке при срабатывании POST?

Есть выпадающие списки с мультивыбором, когда пользователь выбрал нужные ему показатели и нажал кнопку "применить", появляется таблица с учетом выбранных пользователем параметров, но сами выбранные параметры в выпадающем списке не сохраняются, т.е все галочки поставленные пользователем слетают.

Подскажите, пожалуйста, как сделать чтоб выбор пользователя сохранялся при срабатывании метода POST?

app.py
conn = psycopg2.connect(**params)

@app.route("/", methods=["GET","POST"])
def index():
    with psycopg2.connect(**params) as conn:
        cur = conn.cursor()
        cur.execute("SELECT * FROM fact;") 
        rows = cur.fetchall()
        cur.close
    
    if request.method == "POST":
        # Получение переменных выбранных пользователем и обработка массива select multiple
        year = [int(i) for i in request.form.getlist("year") if i.isdigit()]
        print(year)
        station = [str(i) for i in request.form.getlist("station")]
        print(station)
        indicators = [str(i) for i in request.form.getlist("indicators")]
        print(indicators)
        columns = [str(i) for i in request.form.getlist("columns")]
        print(columns)
        # Запрос к БД с использованием переменных
        with psycopg2.connect(**params) as conn:
            cur = conn.cursor()
            cur.execute("SELECT {} FROM fact WHERE year = ANY(%s) AND indicators = ANY(%s) AND name = ANY(%s);"
                        .format(",".join(["\"{}\"".format(c) for c in columns])),(year, indicators, station))
            rows = cur.fetchall()
            cur.close
            # Имя скачавшегося файла
        filename = "fact.xlsx"
        # Путь файла(выбран стандартный, downloads)
        filepath = os.path.join(os.path.dirname(__file__), filename)
        # создаем новую книгу excel
        workbook = openpyxl.Workbook()
        # Получаем активный лист
        worksheet = workbook.active
        # Заполняем таблицу данными из запроса к базе данных
        worksheet.append(columns)
        for row in rows:
            worksheet.append(list(row))           
        # Сохраняем результат в файл
        workbook.save(filepath)
        # Отображение полученных данных на странице
        return render_template("index.html", rows=rows, columns=columns, form_visible=True)
    else:
        return render_template("index.html", rows=rows, form_visible=False)


index.html

{% if form_visible %}
  <form method ="post" action="/">
    <label for="year"></label>
    <select type="number" id = "year" name ="year" class="selectpicker" data-actions-box="true" multiple="multiple">
      <option class="optionGroup" selected disabled>Выберите год(а)</option>
      <option value="2014">2014</option>
      <option value="2015">2015</option>
      <option value="2016">2016</option>
      <option value="2017">2017</option>
      <option value="2018">2018</option>
      <option value="2019">2019</option>
      <option value="2020">2020</option>
      <option value="2021">2021</option>
      <option value="2022">2022</option>
      <option value="2023">2023</option>
    </select><br><br>
..............
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Flask
Седой и строгий
Передавать выбранное из обработчика в шаблон и в соответствующих option добавлять атрибут selected.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы