django - 1.选择2.过滤3.然后切

时间:2013-07-16 08:03:28

标签: python django django-models

我正在尝试这样做:

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]

3 个答案:

答案 0 :(得分:2)

也许你可以使用:

random.sample(population, k)

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

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

答案 1 :(得分: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

这里的观点

答案 2 :(得分: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