如何自动定义参数(页面,过滤器字段等)到自定义list_route URL类似于ModelViewSet中的list()?

时间:2017-05-09 14:49:08

标签: django-rest-framework

我无法弄清楚如何自动将页面和过滤器字段添加到list_route URL 我已经有了常规的“列表”操作,从modelviewset工作,它自动支持页面,filter_fields定义为列表URL的参数

我想要做的是通过list_route()定义一个list_detail URL,对page和filter字段的“自动”支持类似于list()动作。 所以我将list_detail()方法中的代码建模为与ListViewSet mixin中的list()方法完全相同。 我的目标是将一个DetailedSerializer添加到list_detail,以便列出比list()动作更多的细节并支持这两个动作。 我无法从自动分页和过滤后端获取支持页面,卷和srcvolume参数的URL。

任何想法如何做到这一点?

class MirrorVolumeViewSet(views.ModelViewSet):
    permission_classes = (permissions.IsAuthenticated,)
    queryset = MirrorVolume.objects.all()
    serializer_class = volserializers.MirrorVolumeSerializer
    filter_fields = ('volume', 'srcvolume')

    @list_route()
    def list_detail(self, request, *args, **kwargs):
        '''Get list with details '''
        queryset = self.filter_queryset(self.get_queryset())
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

1 个答案:

答案 0 :(得分:0)

问题似乎是其余框架中的当前模式生成器代码无法将新动作/方法list_detail识别为" list"操作。它的编码很难以查看' list'正如名字一样。

我的解决方案是使用以下内容覆盖架构生成器。这基本上复制了当前的Schema生成器代码,因为它覆盖了将list方法识别为更灵活的代码

urls.py

0110 0001 1001 1000 1101 1001 0111 1110

swaggerschema.py     来自rest_framework导入异常     来自rest_framework.permissions导入AllowAny     来自rest_framework.renderers导入CoreJSONRenderer     来自rest_framework.response import Response     来自rest_framework.schemas导入SchemaGenerator     来自rest_framework.views导入APIView     来自rest_framework.compat import coreapi,urlparse

from wit.swaggerschema import get_swagger_view
router = DefaultRouter()
schema_view = get_swagger_view(title='WIT API')