0

У меня есть простой вложенный маршрутизатор с использованием drf-nested-routers, аналогичный примеру на странице readme. Просмотр списка на вложенном маршруте вообще не разбивается на страницы, игнорируя мою настройку DEFAULT_PAGINATION_CLASS. Это по дизайну? Вложенные маршруты должны вручную выполнять разбиение на страницы? Если я пытаюсь вызвать self.get_paginated_response в list методе моей вложенной Viewset, я получаю эту ошибку:Django REST Framework Вложенные маршрутизаторы - разбиение на страницы не работает

AttributeError at /api/foo/13/bar/ 
'PageNumberPagination' object has no attribute 'page' 

Вот мой list метода в моем вложенном зрении:

def list(self, request, workplan_pk=None): 
     milestones = self.get_queryset() 
     wp = get_object_or_404(Workplan, pk=workplan_pk) 
     milestones = milestones.filter(workplan=wp) 
     return Response(self.get_serializer_class()(milestones, many=True, context={'request': request}).data) 
+0

У меня были разбитые страницы с разбивкой по страницам, без проблем. Pagination обрабатывается видами, которые используют paginator, представления ничего не знают о маршрутизации. Они получают запрос только в качестве параметра. Я думаю, что проблема в другом месте. – Ivan

+0

Не могли бы вы разместить полную трассировку стека? – Ivan

+0

@Ivan, что возвращает метод 'list' вашего вложенного маршрутизатора? Mine возвращает объект DRF Response с сериализованными данными. Мне интересно, нужно ли мне возвращать что-то еще. Я обновил вопрос, чтобы показать мой метод 'list' – Neil

ответ

1

Это не имеет ничего общего с маршрутизаторами. Маршрутизация прозрачна для просмотров, и единственное, что они получают, это объект Request.

Вы можете переопределить ModelViewSet.get_queryset() так:

class WorkplanMilestones(ModelViewSet): 
    #... 
    def get_queryset(self): 
     wp = get_object_or_404(Workplan, pk=self.kwargs['workplan_pk']) 
     return wp.milestones 

Я предполагаю, что здесь, что параметр URL называется workplan_pk и milestones обратная связь для модели основных этапов.

Это вернет контрольные точки рабочего плана, а остальные (включая разбивку на страницы) обрабатываются ModelViewSet.

+0

Я понимаю, что это не должно иметь ничего общего с маршрутизаторами. С другой стороны, если мой метод списка не разбивает данные в явном виде, где произойдет разбиение на страницы? Я понимаю из документов drf-inested-routers, что мне приходится перезаписывать 'list', так что мне не нужно явно указывать там страницы? – Neil

+0

Я добавлю полный пример. – Ivan

+1

@Neil разбиение на страницы происходит в 'list', поэтому, если вы переопределяете это, вам также придется обрабатывать разбиение на страницы. Если вы только переопределяете 'get_queryset', хотя' list' будет делать разбивку на страницы для вас. – Ivan

Смежные вопросы