Создание таблицы 2D-данных в Flask/Python/SQLAlchemyPython

Программы на Python
Ответить
Anonymous
 Создание таблицы 2D-данных в Flask/Python/SQLAlchemy

Сообщение Anonymous »

Я новичок в Flask на Python и собираю приложение на основе веб-страницы для поддержки простого инструмента выбора опций. Я сохраняю данные из веб-форм в базу данных SQLite с помощью SQLAlchemy.
В приложении есть три формы ввода. Первая форма принимает несколько вариантов процесса (num_options), а вторая форма принимает ряд критериев (которые будут использоваться для оценки вариантов — num_criteria). Третья форма, в которой и заключается проблема, содержит таблицу со строками num_options и столбцами num_criteria, и каждый из элементов формы содержит «оценку» (где num_score = num_options * num_criteria). Пример этой формы показан ниже — в данном случае num_options = 3 и num_criteria = 4.
ПРИМЕЧАНИЕ: первые две формы работают во всех отношениях, поэтому представление Flask и файловая структура базы данных работают — моя проблема связана с третьей формой Оценки. Формат формы результатов показан ниже.

Код: Выделить всё

|            | criteria(1) | criteria(2) | criteria(3) | criteria(4) |
|:----------:|:-----------:|:-----------:|:-----------:|:-----------:|
|  option(1) | score(1,1)  |  score(1,2) |  score(1,3) |  score(1,4) |
|  option(2) | score(2,1)  |  score(2,2) |  score(2,3) |  score(2,4) |
|  option(3) | score(3,1)  |  score(3,2) |  score(3,3) |  score(3,4) |
Я передаю данные формы в базу данных SQLite с помощью SQLAlchemy.
Мне бы хотелось, чтобы кнопка «Отправить» формы создавала таблицу данных в базе данных SQLite в следующем формате:

Код: Выделить всё

| score_id | option_id | criteria_id | score |
|:--------:|:---------:|:-----------:|:-----:|
|    1     |    1      |      1      |  45   |
|    2     |    1      |      2      |  73   |
|    3     |    1      |      3      |  44   |
|    4     |    1      |      4      |  22   |
|    5     |    2      |      1      |  34   |
|    6     |    2      |      2      |  95   |
... и т. д., при этом общее количество строк равно (num_options * num_criteria).
Моя проблема заключается в том, что когда я отправляю данные в показанную таблицу, все оценки сохраняются как любое значение, указанное в ПЕРВОМ (вверху слева) элементе формы. Первые три столбца введены правильно.
Python/Flask/SQLAlchemy (как вы будете Know) состоит из трех компонентов:
выражения «case», которые соединяют код Python с таблицами базы данных и HTML-кодом. Я не использовал FormField или FieldList для формы «Оценки», поскольку пытался заставить ее работать, используя рекомендации AI, и она выдавала ошибки, которые, похоже, связаны с рендерингом формы в html. У меня также есть ДВА списка переменной длины, с которыми я не думаю, что он справится, поскольку он, похоже, предоставляет фиксированный список списков переменной длины.
Рендеринг формы на Python/Flask. Ниже я показываю соответствующий раздел кода. Возможно, проблема в строке кода db.session.add(...), поскольку ее последний компонент "scores = form.scores.data" не имеет возможности перебирать элементы формы - и я не смог найти никакой ссылки, которая бы подсказывала, как это сделать.

Код: Выделить всё

    @app.route('/scoring', methods=['GET', 'POST'])
def scoring():
# there are several lines removed here that are not relevant to this issue

form = ScoresForm()

db.session.query(Scores).delete()
if form.validate_on_submit():
for option in all_option_ids:
for criterion in all_criteria_ids:
db.session.add(Scores(option_id=option, criteria_id=criterion, scores = form.scores.data))
db.session.commit()
flash('Scores Saved!')
return redirect(url_for('scoring'))
html/jinja отображение формы и ссылки на данные. Я снова копирую ниже часть HTML-кода, содержащую часть формы с оценками — это отображает изображение, которое я прикрепил выше. Опять же, хотя код создает форму оценок 3 x 4 и позволяет пользователю вводить 12 чисел, только первое (вверху слева) фактически сохраняется в таблице данных (неоднократно).

Код: Выделить всё

    {% for options in options %}
{{ options.option_name }}
{% for criteria in criteria %}

{{ form.scores(class="form-input") }}

{% endfor %}
{% endfor %}
Как переписать это, чтобы добиться того, чего я хочу, возможно, путем включения какого-либо способа перебора всех элементов в форме или использования какой-либо другой возможности Flask для захвата всех данных в форме (например, в списке), чтобы я мог реструктурировать ее и сохранить?

Подробнее здесь: https://stackoverflow.com/questions/799 ... sqlalchemy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»