如何以随机方式订购对象?

时间:2019-07-01 01:31:30

标签: python django python-3.x postgresql

我正在将Django与Python 3.7和PostGres 9.5结合使用。我使用以下命令获取所有对象并对其进行迭代...

article_set = Article.objects.all()
for article in article_set:

是否可以修改现有查询或循环,以便每次以随机顺序返回对象?如果可能的话,我宁愿不进行第二次查询。

3 个答案:

答案 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)