Разница между ViewSet и GenericViewSet в структуре отдыха Django - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть Django rest framework GenericViewset , для которого я пытаюсь настроить нумерацию страниц следующим образом:

#settings.py
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 
         'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 20
}

#views.py
class PolicyViewSet(viewsets.GenericViewSet):
    def list(self, request):
        queryset = Policy.objects.all()
        page = self.paginate_queryset(queryset)
        serializer = PolicySerializer(page, many=True)
        return self.get_paginated_response(serializer.data)

Это работает как положено. Однако, если я пытаюсь сделатьТо же самое с обычным Viewset следующим образом:

#views.py
class PolicyViewSet(viewsets.ViewSet):
    def list(self, request):
        queryset = Policy.objects.all()
        page = self.paginate_queryset(queryset)
        serializer = PolicySerializer(page, many=True)
        return self.get_paginated_response(serializer.data)

Я получаю сообщение об ошибке:

У объекта 'PolicyViewSet' нет атрибута 'paginate_queryset'

Как настроить нумерацию страниц с помощью обычного Viewset .В чем разница между GenericViewset и Viewset в DRF?

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Как настроить нумерацию страниц с помощью обычного набора?

Если вы хотите использовать "pagination_class" в вашем наборе, то вместо этого следует использовать GenericViewSet из ViewSet .

0 голосов
/ 15 февраля 2019

Разбивка на страницы выполняется автоматически, только если вы используете общие виды или наборы представлений

Прочитайте документы

И ответьте на свой второйвопрос В чем разница между GenericViewset и Viewset в DRF

DRF имеет две основные системы для обработки представлений:

  1. APIView :Это предоставляет некоторые методы-обработчики для обработки глаголов http: get, post, put, patch и delete.
  2. ViewSet :Это абстракция над APIView, которая предоставляет действий в виде методов:

    • list: только для чтения, возвращает несколько ресурсов (глагол http: get).Возвращает список диктов.
    • retrieve: только для чтения, один ресурс (http verb: get, но будет ожидать идентификатор).Возвращает один диктант.
    • create: создает новый ресурс (глагол http: post)
    • update/partial_update: редактирует ресурс (глаголы http: put/patch)
    • destroy: удаляет ресурс (глагол http: delete)
  3. GenericViewSet : существует множество GenericViewSet, наиболее распространенныхбыть ModelViewSet.Они наследуются от GenericAPIView и имеют полную реализацию всех действий : list, retrieve, destroy, updated и т. Д. Конечно, вы также можете выбрать некоторые изих читать документы .

...