我有像这样的QuerySet
QS = SomeModel.objects.filter(some_filter='filter_value')
我需要从中随机选择n个元素,因此我生成了一个0到0之间的n个随机数的列表,列表变量idx_list。
现在,我可以遍历idx_list并一次从QS中选取一个元素,但是,如果没有循环,我可以在一行中进行吗?
答案 0 :(得分:0)
如果你想从db中获取项目而不是你可以使用.order_by('?')
以随机顺序选择对象,而不是生成id列表
您可以使用values_list()
idx_list = SomeModel.objects.filter(some_filter='filter_value').order_by('?').values_list('id', flat=True)[:x]
或者您可以获取查询集:
QS = SomeModel.objects.filter(some_filter='filter_value').order_by('?')
然后根据需要切割多个项目:
# Get id's of random x elements
idx_list = map(lambda item: item.id, list(QS[0:x]))