我正在使用Flask构建一个多项选择题测验Web应用程序,并使用sqlite flask-sqlachemy将其存储。我目前有以下数据库。我还设法通过下面的模板和路线来显示问题。
我不确定如何检查具有正确答案的用户答案(由布尔“ correct_answer”标记),并将其存储在数据库中。我正在考虑在路线上进行检查,但是由于每组都有多个问题,因此我不确定如何进行检查。
class Set(db.Model):
__tablename__ = 'set'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(140))
questions = db.relationship('Question', backref='set', lazy='dynamic')
user_answers = db.relationship('UserAnswer', backref='set', lazy='dynamic')
class Question(db.Model):
__tablename__ = 'question'
id = db.Column(db.Integer, primary_key=True)
set_id = db.Column(db.Integer, db.ForeignKey('set.id'))
question_text = db.Column(db.Text)
options = db.relationship('Option', backref='question', lazy='dynamic')
user_answers = db.relationship('UserAnswer', backref='question', lazy='dynamic')
class Option(db.Model):
__tablename__ = 'option'
id = db.Column(db.Integer, primary_key=True)
question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
option_text = db.Column(db.Text)
correct_answer = db.Column(db.Boolean, default=False)
class UserAnswer(db.Model):
__tablename__ = 'useranswer'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
set_id = db.Column(db.Integer, db.ForeignKey('set.id'))
question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
user_answer = db.Column(db.Integer)
@app.route('/quiz/<set_id>')
def find_question(set_id):
set = Set.query.filter_by(id=set_id).first_or_404()
questions = Question.query.filter_by(set_id=set_id).all()
return render_template('question.html', title='Questions', set=set, questions=questions)
<form action="/quiz_submit" method="POST">
<ol>
{% for question in questions %}
<li id="q{{ question.id }}"">{{ question.question_text }}</li>
{% for option in question.options %}
<input type="radio" id="{{ option.id }}" name="{{ question.id }}" value="{{ option.option_text }}">{{ option.option_text }}<br>
{% endfor %}
<br>
{% endfor %}
</ol>
<input type="submit" value="Submit" name="Submit"/>
</form>