Reputation: 13870
I have query:
items = MyModel.objects.all().order_by('nr')[:10]
and I get 10 items with higher number. Now I have to mix these results. How to do it?
Upvotes: 20
Views: 10323
Reputation: 4136
Curiously, this not very well documented feature works:
Country.objects.order_by('?')
source: http://www.jpstacey.info/blog/2008/09/03/random-ordering-of-query-results-in-django
Astonishingly, the existing documentation has very little Google juice, unless you search for "randomly" rather than "random".
Upvotes: 33
Reputation: 6185
OK, you can't re-order a queryset after you've pulled it in, but you can do this instead
import random
items = list(MyModel.objects.all().order_by('nr')[:10])
random.shuffle(items)
Upvotes: 19
Reputation: 1937
You can't reorder a query once a slice has been taken, so use different approach
import random
items = sorted(MyModel.objects.all().order_by('nr')[:10], key=lambda x: random.random())
Upvotes: 21