如何混合查询集结果?

Nip*_*ips 14 django

我有疑问:

items = MyModel.objects.all().order_by('nr')[:10]
Run Code Online (Sandbox Code Playgroud)

我得到10个数字更高的物品.现在我必须混合这些结果.怎么做?

And*_*ity 19

奇怪的是,这个没有很好记录的功能有效:

Country.objects.order_by('?')
Run Code Online (Sandbox Code Playgroud)

来源:http://www.jpstacey.info/blog/2008/09/03/random-ordering-of-query-results-in-django

令人惊讶的,除非您搜索"随机"而不是"随机",否则现有文档几乎没有Google果汁.

  • 之所以没有很好地记录,是因为这样做会导致大型数据库出现巨大的性能问题.http://stackoverflow.com/questions/1731346/how-to-get-two-random-records-with-django#6405601 (3认同)

Ser*_*tin 16

切片拍摄后,您无法对查询重新排序,因此请使用不同的方法

import random
items = sorted(MyModel.objects.all().order_by('nr')[:10], key=lambda x: random.random())
Run Code Online (Sandbox Code Playgroud)


moo*_*pet 10

好的,您在拉入查询集后无法对其进行重新排序,但您可以这样做

import random
items = list(MyModel.objects.all().order_by('nr')[:10])
random.shuffle(items)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常恰当的答案。这是我的赞成票。 (3认同)