В приложении есть три формы ввода. Первая форма принимает несколько вариантов процесса (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 в следующем формате:
Код: Выделить всё
| 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 |
Моя проблема заключается в том, что когда я отправляю данные в показанную таблицу, все оценки сохраняются как любое значение, указанное в ПЕРВОМ (вверху слева) элементе формы. Первые три столбца введены правильно.
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'))
Код: Выделить всё
{% for options in options %}
{{ options.option_name }}
{% for criteria in criteria %}
{{ form.scores(class="form-input") }}
{% endfor %}
{% endfor %}
Подробнее здесь: https://stackoverflow.com/questions/799 ... sqlalchemy
Мобильная версия