我正在尝试执行此逻辑:
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]
我正在尝试执行此逻辑:
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]
也许你可以使用:
random.sample(population, k)
返回从序列中k
选择的唯一元素的长度列表。population
用于无放回随机抽样
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
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