我正在将Django与Python 3.7和PostGres 9.5结合使用。我使用以下命令获取所有对象并对其进行迭代...
article_set = Article.objects.all()
for article in article_set:
是否可以修改现有查询或循环,以便每次以随机顺序返回对象?如果可能的话,我宁愿不进行第二次查询。
答案 0 :(得分:2)
As is explained in the documentation you can use order_by('?')
如下:
article_set = Article.objects.order_by('?')
答案 1 :(得分:0)
我对Django不太熟悉,如果我错了,请纠正我,但我认为:
Article.objects.all()
#Roughly equates to:
"SELECT * from articles"
所以我相信您应该可以:
Article.objects.all().order_by('RANDOM()')
#Thus producing this SQL statement:
"SELECT * from articles ORDER BY RANDOM()"
哪个应该混合您的输出。
否则,我会说random.shuffle
方法。
from random import shuffle
article_set = Article.objects.all()
for article in shuffle(article_set):
#do work
让我知道order_by是否有效,我可以进行相应的编辑。就像我说的那样,我对Django不太熟悉,因此未经测试,但理论上应该可以。谢谢!
答案 2 :(得分:0)
进行这样的循环
article_set = Article.objects.all()
for article in random.shuffle(article_set):
print(article)