Django REST 随机查询分页

brs*_*gic 3 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以随机方式返回,对于第二页,它应该以C D随机方式返回,等等。

有什么棘手的方法吗?

Tar*_*req 6

我还没有对此进行测试,但似乎您需要重写视图中的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
Run Code Online (Sandbox Code Playgroud)

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

  • 不确定这是否是今天的有效响应,但我将 *shuffle(page.object_list)* 更改为 *shuffle(page)*。我正在使用 DRF 2.2 (2认同)