在 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']