在 sqlalchemy and/or 烧瓶中订购 children
Ordering children in sqlalchemy and/or flask
我有一个显示测验问题的 Flask 应用程序。对于这个问题,以下模型很重要:
class Questions(db.Model):
__tablename__ = "questions"
id = db.Column(db.Integer, primary_key=True)
quiz_id = db.Column(db.Integer, ForeignKey("quizzes.id"))
text = db.Column(db.String(80))
options = db.relationship("Options", backref="question", lazy="dynamic")
class Options(db.Model):
__tablename__ = "options"
id = db.Column(db.Integer, primary_key=True)
question_id = db.Column(db.Integer, ForeignKey("questions.id"))
value = db.Column(db.String(80))
correct = db.Column(db.Boolean)
在python我查询问题并将其发送到jinja2模板。在模板中,循环遍历选项:
{% for option in question.options %}
<div class="form-check my-3">
<input type="radio" class="form-check-input" id="{{ option.id }}"
name="answer" value="{{ option.id }}">
<label class="form-check-label" for="{{ option.id }}"><h3>{{ option }}</h3>
</label>
</div>
{% endfor %}
根据它们在数据库中的 ID,结果将始终是相同顺序的选项。
我想要的是选项随机显示order.So我试过:
{% for option in question.options|random %}
现在出现以下错误:TypeError: object of type 'AppenderBaseQuery' has no len()
在此之后,我尝试查看是否可以在问题本身的 class 中提供顺序。这不是这样工作的,我在其他网站上也找不到任何东西。例如:
options = db.relationship("Options", backref="question", lazy="dynamic", order="random")
我不确定我是否应该能够以随机顺序检索选项,只是在模板中以某种方式随机排列列表。请帮忙。提前致谢。
当您从数据库中获取选项时,您会得到 python list
。
您需要做的就是在渲染模板之前对其进行随机播放。
请参阅下面的示例
import random
options = ['opt7', 'opt14', 'opt21','opt99']
print(options)
random.shuffle(options)
print(options)
输出
['opt7', 'opt14', 'opt21', 'opt99']
['opt21', 'opt99', 'opt14', 'opt7']
我有一个显示测验问题的 Flask 应用程序。对于这个问题,以下模型很重要:
class Questions(db.Model):
__tablename__ = "questions"
id = db.Column(db.Integer, primary_key=True)
quiz_id = db.Column(db.Integer, ForeignKey("quizzes.id"))
text = db.Column(db.String(80))
options = db.relationship("Options", backref="question", lazy="dynamic")
class Options(db.Model):
__tablename__ = "options"
id = db.Column(db.Integer, primary_key=True)
question_id = db.Column(db.Integer, ForeignKey("questions.id"))
value = db.Column(db.String(80))
correct = db.Column(db.Boolean)
在python我查询问题并将其发送到jinja2模板。在模板中,循环遍历选项:
{% for option in question.options %}
<div class="form-check my-3">
<input type="radio" class="form-check-input" id="{{ option.id }}"
name="answer" value="{{ option.id }}">
<label class="form-check-label" for="{{ option.id }}"><h3>{{ option }}</h3>
</label>
</div>
{% endfor %}
根据它们在数据库中的 ID,结果将始终是相同顺序的选项。
我想要的是选项随机显示order.So我试过:
{% for option in question.options|random %}
现在出现以下错误:TypeError: object of type 'AppenderBaseQuery' has no len()
在此之后,我尝试查看是否可以在问题本身的 class 中提供顺序。这不是这样工作的,我在其他网站上也找不到任何东西。例如:
options = db.relationship("Options", backref="question", lazy="dynamic", order="random")
我不确定我是否应该能够以随机顺序检索选项,只是在模板中以某种方式随机排列列表。请帮忙。提前致谢。
当您从数据库中获取选项时,您会得到 python list
。
您需要做的就是在渲染模板之前对其进行随机播放。
请参阅下面的示例
import random
options = ['opt7', 'opt14', 'opt21','opt99']
print(options)
random.shuffle(options)
print(options)
输出
['opt7', 'opt14', 'opt21', 'opt99']
['opt21', 'opt99', 'opt14', 'opt7']