我正在尝试这样做:
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]
答案 0 :(得分:2)
也许你可以使用:
random.sample(population, k)
返回从k
序列中选择的唯一元素的population
长度列表。用于无需替换的随机抽样
答案 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