0
我尝试根据用户的状态设置我的WebAPI的分页。如果用户is_anonymous
他不应该能够使用查询参数设置页面大小。我试图用一个视图类来做到这一点。我可以用两个不同的视图类来限制对其中一个视图的访问,但我认为这不是一个好的解决方案。根据用户类型改变分页与Django休息框架
视图类:
class WeathermList(generics.ListAPIView):
queryset = WeatherMeasurements.objects.all()
serializer_class = WeatherMeasurementsSer
filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,)
filter_class = WeatherMeasurementsFilter
ordering_fields = ('measure_datetime',)
ordering = ('measure_datetime',)
@property
def paginator(self):
"""
The paginator instance associated with the view, or `None`.
"""
if not hasattr(self, '_paginator'):
# import ipdb
# ipdb.set_trace()
if self.request.user.is_anonymous:
self._paginator = AnonymousPaginator
else:
self._paginator = RegisteredPaginator
return self._paginator
分页类:
class RegisteredPaginator(PageNumberPagination):
page_size = 288
page_size_query_param = 'page_size'
max_page_size = 10000
class AnonymousPaginator(PageNumberPagination):
page_size = 288
错误消息:
File ".../env/lib/python3.5/site-packages/rest_framework/generics.py", line 172, in paginate_queryset
return self.paginator.paginate_queryset(queryset, self.request, view=self)
TypeError: paginate_queryset() missing 1 required positional argument: 'request'
的property paginator
在GenericAPIView类最初声明。我不确定我是否正确地重新实现它。当我设置它们时,我的两个自定义分页类正在工作pagination_class
任何帮助获得这个工作非常感谢。
哦,我的上帝,多么尴尬。非常感谢你!你认为这样使用分页是个好主意吗? –
@ChristianRapp是的,事实上,这是最好的方式。实际上,我在这个问题中推荐了几个小时前的方法:http://stackoverflow.com/questions/38988272/django-rest-framework-drf-how-to-set-pagination-class-depending-on-query -param/38989390#38989390 – levi