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
处理。
我有一个使用 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
处理。