Ant*_*nti 6 pagination swagger django-rest-framework drf-spectacular
我正在努力在 django Rest 框架中正确生成自定义分页的模式。\n我正在使用 drf-spectaulous 进行模式生成。我的自定义分页包括djangos PageNumberPagination 不附带的总页数字段。\n响应已正确序列化并返回,并包含总页数,但我的 swagger 文档中的架构不包含该字段。\n这是我的代码:
\n分页.py
\nfrom rest_framework import pagination\nfrom rest_framework.response import Response\n\nclass CustomPagination(pagination.PageNumberPagination):\n page_size = 10\n page_size_query_param = 'page_size'\n max_page_size = 100\n page_query_param = 'p'\n \n def get_paginated_response(self, data):\n return Response({\n 'page_size': self.page_size,\n 'total_objects': self.page.paginator.count,\n 'total_pages': self.page.paginator.num_pages,\n 'current_page_number': self.page.number,\n 'next': self.get_next_link(),\n 'previous': self.get_previous_link(),\n 'results': data,\n })\nRun Code Online (Sandbox Code Playgroud)\n这是我的观点:
\n视图.py
\n@extend_schema_view(\n get=extend_schema(\n parameters=[OpenApiParameter("q", OpenApiTypes.STR, OpenApiParameter.QUERY),],\n request=TestStandardSearchSerializer,\n responses=TestStandardSerializer\n )\n )\nclass TestStandardSearchView(ListAPIView):\n serializer_class = TestStandardSearchSerializer\n queryset = TestStandard.objects.all()\n pagination_class = CustomPagination\n \n def get(self, request, *args, **kwargs):\n query = self.request.query_params.get('q')\n queryset = SearchQuerySet().all().filter(content=query).order_by('acronym')\n page = self.paginate_queryset(queryset)\n serializer = self.get_serializer(page, many=True)\n return self.get_paginated_response(serializer.data)\n \n def get_serializer_class(self):\n if self.request.method == 'GET':\n return TestStandardSearchSerializer\nRun Code Online (Sandbox Code Playgroud)\n我的 swagger 文档的响应架构如下:
\nPaginatedTestStandardList\n{\ncount integer example: 123\nnext string($uri) nullable: true example: http://api.example.org/accounts/?p=4\nprevious string($uri) nullable: true example: http://api.example.org/accounts/?p=2\nresults [TestStandard{...}]\n}\nRun Code Online (Sandbox Code Playgroud)\n标准 django 分页正确 \xc3\xadnserted 在架构中,但不是我的自定义分页响应。\n我期望/想要的是让我的自定义分页响应与“count”同一级别的总页数字段正确集成、“下一个”和“上一个”。
\n我尝试过...\n我有一个使用drf_yasg的工作解决方案,使用 PaginatorInspector 提供自定义架构。但这在drf-spectaulous中不可用。\n我还在@extend_schema_view中使用了inline_serializer和自定义响应,例如:
\nresponses={\n 200: inline_serializer(\n name='PaginatedTestStandardSearchResponse',\n fields={\n 'total-pages': serializers.IntegerField(),\n 'results': TestStandardSearchSerializer()\n },\nRun Code Online (Sandbox Code Playgroud)\n这导致了总页数嵌套在结果中的架构。\n我正在使用:
\ndrf-spectacular 0.21.2\nDjango 3.2.12\ndjango-rest-swagger 2.2.0\ndjangorestframework 3.12.4\nRun Code Online (Sandbox Code Playgroud)\n任何帮助表示赞赏。我最近刚刚开始使用 django rfw 和 openapi 模式生成。抱歉,如果我在这里错过了一些明显的东西。
\n小智 8
get_paginated_response_schema您需要覆盖CustomPagination 中的方法。有关如何编写它的参考,您可以在rest_framework包内的pagination.py文件中看到它。
如果你想知道它是如何工作的,你可以在文件 openapi.py 的 drf-spectaulous 包中找到它,方法 _get_response_for_code。我希望能解决您的问题。
| 归档时间: |
|
| 查看次数: |
3103 次 |
| 最近记录: |