我有以下GenericViewSet,我正在尝试为视图集实现分页,这是我的视图集
class UserAccountViewSet(viewsets.GenericViewSet,
mixins.CreateModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin):
queryset = UserAccount.objects.all()
lookup_field = 'username'
lookup_url_kwarg = "username"
serializer_class = UserAccountSerializer
page_size = 25
page_size_query_param = 'page_size'
max_page_size = 1000
def list(self, request):
queryset = self.queryset
if request.GET.dict():
return Response(status=status.HTTP_501_NOT_IMPLEMENTED)
serializer = UserListSerializer(queryset, many=True)
return Response(serializer.data)
def retrieve(self, request, **kwargs):
pass
def create(self, request, *args, **kwargs):
pass
def update(self, request, *args, **kwargs):
pass
def destroy(self, request, *args, **kwargs):
pass
这是我的配置,
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
),
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'user': '100/day'
}
}
它没有被分页,我如何使用DRF进行分页?
谢谢。答案 0 :(得分:1)
由于您要覆盖list()
方法并且未返回分页响应,因此您的API中没有获得分页响应。相反,您应该在super()
方法中调用list()
,因为DRF的list()
方法本身会返回通用视图或视图集的分页响应。
如果您使用的是通用,则会自动执行分页 观点或视图集。如果您使用常规
APIView
,则需要执行此操作 自己调用分页API 以确保返回分页 响应。
class UserAccountViewSet(viewsets.GenericViewSet,
mixins.CreateModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin):
def list(self, request, *args, **kwargs):
if request.GET.dict():
return Response(status=status.HTTP_501_NOT_IMPLEMENTED)
# call 'super()' to get the paginated response
return super(UserAccountViewSet, self).list(request, *args, **kwargs)