使用Django rest fram更改基于用户类型的分页

2024-05-15 02:56:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据用户的状态设置WebAPI的分页。如果用户is_anonymous他应该不能用查询参数设置页面大小。我试着用一个视图类来做这个。我可以用两个不同的视图类来实现,并限制对其中一个的访问,但我认为这不是一个好的解决方案。在

视图类:

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

分页类:

^{pr2}$

错误消息:

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设置它们时,我的两个自定义分页类都在工作

如果有任何帮助,我们将不胜感激。在


Tags: 用户self视图isrequestfilterfiltersclass
1条回答
网友
1楼 · 发布于 2024-05-15 02:56:08

问题是:self._paginator需要一个paginator类实例,而不是类本身

它应该是AnonymousPaginator()RegisteredPaginator(),而不是AnonymousPaginatorRegisteredPaginator。在

        if self.request.user.is_anonymous:
            self._paginator = AnonymousPaginator()
        else:
            self._paginator = RegisteredPaginator()

相关问题 更多 >

    热门问题