Django REST框架嵌套路由器 - 分页无效

时间:2015-10-22 16:00:30

标签: django pagination django-rest-framework django-queryset drf-nested-routers

我有一个使用drf-nested-routers的简单嵌套路由器,类似于自述页面上的示例。嵌套路由上的列表视图根本没有分页,忽略了我的DEFAULT_PAGINATION_CLASS设置。这是设计的吗?嵌套路由是否必须手动实现分页?如果我尝试在嵌套视图集self.get_paginated_response方法中调用list,则会收到此错误:

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)

1 个答案:

答案 0 :(得分: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处理。