Django REST随机化查询分页

时间:2014-11-18 21:33:38

标签: django django-rest-framework

在Django REST通用列表视图中,我已覆盖get_query_set方法并将paginate_by设置为25。

我想在每个页面中随机化一组项目。但是,当我在get_query_set方法中随机化项目时,整个集合是随机的。

要清除:项目列表为A B C D E F G,并假设paginate_by为2 对于第一页,它应该随机返回A B,对于第2页,它应该随机返回C D等。

有任何棘手的方法吗?

1 个答案:

答案 0 :(得分:2)

我还没有对此进行测试,但您似乎需要在视图中覆盖 paginate_queryset 方法来随机化页面中的对象。所以它会像..

 # or use whatever you were using to randomize the list
 from random import shuffle

 class MyView(ListAPIView):

   def paginate_queryset(self, queryset):

      page = super(MyView, self).paginate_queryset(queryset):
      shuffle(page.object_list)
      return page

有关paginate_queryset如何工作的更多信息,请参阅ListAPIView的源代码:https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/generics.py