1

我正在尝试执行此逻辑:

1. take all objects
2. filter them: all objs which has rate value >= 4
3. then take randomly 4 out of them. 

我怎样才能随机取出 4 个呢?不只是从头开始切割

这是我的代码:
MyObj.objects.filter(objects__rate__gte=4).distinct('id').order_by('-id')[:4]

4

3 回答 3

2

也许你可以使用:

random.sample(population, k)

返回从序列中k选择的唯一元素的长度列表。population用于无放回随机抽样

http://docs.python.org/2/library/random.html#random.sample

于 2013-07-16T08:13:40.687 回答
1

Django 可以选择随机订购。这是通过使用.order_by('?').

所以你的代码将是:

MyObj.objects.filter(rate__gte=4).distinct('id').order_by('?')[:4]

它实际上是在 django 文档中说明的,可以在这里查看https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by

于 2013-07-16T08:13:21.777 回答
1
foo = MyObj.objects.filter(objects__rate__gte=4) # step 1 & 2
random.sample(list(foo), 4) # step 3 (will contain duplicates)
random.sample(set(foo), 4) # step 3, only uniques
于 2013-07-16T08:43:29.160 回答