使用索引列表过滤QuerySet

时间:2015-01-02 21:13:34

标签: python django django-queryset

我有像这样的QuerySet

QS = SomeModel.objects.filter(some_filter='filter_value')

我需要从中随机选择n个元素,因此我生成了一个0到0之间的n个随机数的列表,列表变量idx_list。

现在,我可以遍历idx_list并一次从QS中选取一个元素,但是,如果没有循环,我可以在一行中进行吗?

1 个答案:

答案 0 :(得分:0)

如果你想从db中获取项目而不是你可以使用.order_by('?')以随机顺序选择对象,而不是生成id列表

您可以使用values_list()

以随机顺序仅提取ID
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]))