Django REST Framework 嵌套路由器 - 分页不起作用

Django REST Framework Nested Routers - Pagination not working

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

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)

这与路由器无关。路由对视图是透明的,它们唯一得到的是一个 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 是里程碑模型的反向关系。

这将 return 工作计划的里程碑,其余(包括分页)由 ModelViewSet 处理。