将文档添加到 generics.RetrieveAPIView 'retrieve' 方法的查询参数

问题描述

我有一个简单的视图,它将“电子邮件”作为查询参数,我希望将它记录在 OpenAPI 自动生成的架构中。到目前为止,我尝试将 method_decoratorswagger_auto_schema 一起应用于 API View 类定义,但没有成功:

from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from django.utils.decorators import method_decorator


@method_decorator(name='retrieve',decorator=swagger_auto_schema(manual_parameters=[
    openapi.Parameter('email',openapi.IN_QUERY,description="Email to be checked",type=openapi.TYPE_STRING)]))
class EmailCheckView(generics.RetrieveAPIView):
    serializer_class = EmailCheckSerializer

    def get_queryset(self):
        email = self.request.query_params.get('email',None)
        if not email:
            raise Http404
        return User.objects.filter(email=self.kwargs['email'])

自动生成的模型只包含来自序列化器的主体信息。有什么想法吗?

DRF:3.12.2

drf-yasg: 1.20.0

我的 swagger 模式添加到 urls.py 中:

from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
   openapi.Info(
      title="My API",default_version='v1',description="",),public=True,permission_classes=[permissions.AllowAny],)

urlpatterns = [
    ...
    path('docs/',schema_view.with_ui('swagger',cache_timeout=0),name='schema-swagger-ui'),...
] 

解决方法

改变

name='retrieve'

name='get'

@method_decorator(
    name="get",# change is here
    decorator=swagger_auto_schema(
        manual_parameters=[
            openapi.Parameter(
                "email",openapi.IN_QUERY,description="Email to be checked",type=openapi.TYPE_STRING,)
        ]
    ),)
class EmailCheckView(generics.RetrieveAPIView):
    serializer_class = EmailCheckSerializer

    def get_queryset(self):
        email = self.request.query_params.get("email",None)
        if not email:
            raise Http404
        return User.objects.filter(email=self.kwargs["email"])

注意:我不确定问题属于 method_decorator(...) 还是 drf-yasg 本身