我正在尝试在Django中执行以下操作:
因此,如果我的初始数据库查询如下所示:
queryset = Item.objects.filter(my_field = a_value)
如何从查询中获取ID列表,以便我可以随机播放:
random.shuffle(list_of_ids_matching_query)
即。我想从查询集中创建list_of_ids_matching_query
,但我无法解决如何做到这一点。
然后我打算按照以下方式进行查询:
queryset = Item.objects.filter(pk__in=list_of_ids_matching_query)
但我需要查询以与随机列表中的ID相同的顺序返回记录。它会那样做吗?或者我是否必须一次从数据库中提取记录。
我想要做的是,并且可能有更好的方法来实现这一点,就是从数据库中随机获取一组随机结果。
答案 0 :(得分:2)
尝试此查询
list_of_ids_matching_query = list(Item.objects.filter(my_field = a_value).values_list('id', flat=True))
以与洗牌列表中的ID相同的顺序获取记录,
ordering = 'FIELD(`id`, %s)' % ','.join(str(id) for id in shuffiled_list)
Item.objects.filter(pk__in=shuffiled_list).extra(select={'ordering': ordering }, order_by=('ordering', ))