Я пытаюсь создать приложение flask, которое извлекает вопросы из базы данных sqlite, а затем позволяет отправлять оценки и комментарии по каждому вопросу. У меня возникают проблемы с пониманием того, как создавать формы для всех вопросов, и я не могу передать данные из форм обратно в мое приложение flask. Моя текущая веб-страница выглядит следующим образом:
Текущая веб-страница
Файл html, который я использую для создания этого файла, выглядит следующим образом:
запись. html
<doctype html="">
{% from "_formhelpers.html" import render_field %}
<form method="post">
<table>
{% for key, value in form_dict.items() %}
<TR>
{% set x = key[4:]|int %}
<TD class="c1">{{ question_list[x-1] }}</TD>
<TD class="c1">{{ key }}</TD>
<TD class="c2">{{ render_field(value.score) }}</TD>
<TD class="c3">{{ render_field(value.comment) }}</TD>
</TR>
{% endfor %}
</table>
<p><input type="submit" value="Submit"></p></form>
</doctype>
И код python / flask выглядит следующим образом:
class Record_Form(Form):
score_choices = [('0.00', '0.00'),
('0.25', '0.25'),
('0.50','0.50'),
('0.75','0.75'),
('1.00','1.00')]
score = SelectField('Score', choices=score_choices)
comment = StringField('Comment')
owner = StringField('Owner')
@app.route('/record/<id>', methods=['GET', 'POST'])
def new_record(id):
form = Record_Form(request.form)
question_list_qry = Question.query.all()
question_list = []
question_ids_list = []
for i in question_list_qry:
question_list.append(i.question)
question_ids_list.append(i.id)
form_dict={}
for id in question_ids_list:
form_dict[f'form{id}'] = Record_Form(request.form)
if request.method == 'POST' and form.validate():
print(form_dict['form1'].score.data)
print(form_dict['form2'].score.data)
print(form_dict['form3'].score.data)
print(form_dict['form1'].comment.data)
print(form_dict['form2'].comment.data)
print(form_dict['form3'].comment.data)
return redirect('/')
return render_template('record.html', question_list=question_list, form_dict=form_dict)
В настоящее время, если я go в мой * Приложение 1036 * и отправьте три разных балла и три разных комментария в первых трех вопросах. Результирующий вывод только из "form1".
Три разных оценки и комментарии
Но это вывод, который я получаю:
0.25
0.25
0.25
Dog
Dog
Dog
Что я делаю неправильно? Я думаю, что это как-то связано с form.validate, но я не уверен.
Вот рендеринг HTML:
<form method="post">
<table>
<TR>
<TD class="c1">Question 1</TD>
<TD class="c1">form1</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 2</TD>
<TD class="c1">form2</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 3</TD>
<TD class="c1">form3</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 4</TD>
<TD class="c1">form4</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 5</TD>
<TD class="c1">form5</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 6</TD>
<TD class="c1">form6</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 7</TD>
<TD class="c1">form7</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 8</TD>
<TD class="c1">form8</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 9</TD>
<TD class="c1">form9</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 10</TD>
<TD class="c1">form10</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 11</TD>
<TD class="c1">form11</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
<TR>
<TD class="c1">Question 12</TD>
<TD class="c1">form12</TD>
<TD class="c2">
<dt><label for="score">Score</label>
</dt><dd><select id="score" name="score"><option value="0.00">0.00</option><option value="0.25">0.25</option><option value="0.50">0.50</option><option value="0.75">0.75</option><option value="1.00">1.00</option></select>
</dd>
</TD>
<TD class="c3">
<dt><label for="comment">Comment</label>
</dt><dd><input id="comment" name="comment" type="text" value="">
</dd>
</TD>
</TR>
</table>
<p><input type="submit" value="Submit"></p></form>
</doctype>