Django Rest Framework: разбиение на страницы с ListModelMixin - PullRequest
0 голосов
/ 02 апреля 2020

Я следовал примерам документации django -rest-framework, но у меня возникают проблемы с настройкой нумерации страниц при использовании `ListModelMixin и viewsets.GenericViewset

Это НЕ разбивает на страницы:

class InvitesViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
    permission_classes = [IsAuthenticated]
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def list(self, request):
        invited_users = self.get_queryset() # just did this as a test
        serializer = UserSerializer(invited_users, many=True)
        return Response(serializer.data)

В то время как это делает:

class InvitesViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
    permission_classes = [IsAuthenticated]
    queryset = User.objects.all()
    serializer_class = UserSerializer

Как я могу вернуть пользовательский ответ списка (потому что мне нужно отфильтровать в request.user) с разбиением на страницы при использовании ListModelMixin?

1 Ответ

2 голосов
/ 02 апреля 2020

По вашему мнению, вы просто перезаписали функцию list() по умолчанию, таким образом вы просто удалили часть нумерации страниц.

Посмотрите код ListModelMixin

class ListModelMixin:
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

, если вы нужно использовать отфильтрованные результаты, затем использовать def get_queryset() функцию

def get_queryset(self):
    queryset = super(FooView, self).get_queryset()
    queryset = queryset.filter(foo=bar)
    return queryset
...