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