<p>不幸的是,我用另一种方式解决了这个问题。不是最好的,但应该没问题。我所做的只是添加值为1的复选框输入。当答案被勾选时,这将把1写入数据库。因为它只在有勾选的内容时才写入,所以我需要添加一个隐藏的输入字段,所以也会使用未勾选的值。问题是,当用户勾选特定问题的答案时,它首先创建值1,另外创建值0。假设有两个问题,每个问题有两个答案。那么让我们假设每个问题的第一个答案都是正确的。然后我将获得值[1,0,0,1,0,0]。因为我不太擅长JavaScript,所以我使用Python来解决我的问题。我删除了每个1右边的条目</p>
<p>这是我的html新代码。它基本上将复选框的值存储在答案中,当分配多个值时,答案将变为列表。(我假设,它也可能始终是一个列表)无论如何,在调用request.form时,我确实使用了getList()从复选框中获取所有值</p>
<pre><code><form method="POST" action="/answerSurvey">
<ol>
{% for q in questions %}
<li>
<label for="questionBody"><b>{{ q.body }}</b></label>
{% for a in answers %}
{% if q.id == a.question_id %}
<input type="checkbox" name="answers" id="answers" value="1">
<input type="hidden" name="answers" id="answers-hidden" value="0">
<label for="answers">{{ a.body }}</label>
<br>
{% endif %}
{% endfor %}
</li>
{% endfor %}
</ol>
<button type="submit">Submit</button>
</form>
</code></pre>
<p>这是python中的代码。我正在向后循环,因为删除项目时列表会变小,并且随着索引的增加循环时会导致IndexOutOfBoundsException</p>
<pre><code>@app.route('/answerSurvey', methods=['POST'])
@login_required
def answerSurvey():
answers_user = request.form.getlist('answers')
for i in range(len(answers_user)-1, -1, -1):
if answers_user[i] == '1':
del answers_user[i + 1]
...
return redirect(url_for('dashboard'))
</code></pre>