Django Rest 框架 drf-yasg swagger ListField 序列化程序的多个文件上传错误

问题描述 投票:0回答:2

我正在尝试从 swagger (使用

drf-yasg
)上传文件输入,但是当我使用
MultiPartParser
类时,它给了我以下错误:

drf_yasg.errors.SwaggerGenerationError: FileField is supported only in a formData Parameter or response Schema

我的看法:

class AddExperience(generics.CreateAPIView):
    parser_classes = [MultiPartParser]

    permission_classes = [IsAuthenticated]
    serializer_class = DoctorExperienceSerializer

我的序列化器:

class DoctorExperienceSerializer(serializers.Serializer):
    diploma = serializers.ListField(
        child=serializers.FileField(allow_empty_file=False)
    )
    education = serializers.CharField(max_length=1000)
    work_experience = serializers.CharField(max_length=1000)

我也尝试过

FormParser
但它仍然给我同样的错误。另外:
FileUploadParser
解析器,但它的工作原理类似于
JsonParser

python python-3.x django django-rest-framework drf-yasg
2个回答
4
投票

OpenAPISchema
(
OAS
) 2 不支持多文件上传(参见问题#254);但
OAS 3
支持它(您可以在live swagger编辑器上使用这个YML规范看到这个结果))。

说到真正的问题,drf-yasg 的文档中有一节

如果您希望向新项目添加 Swagger/OpenAPI 支持,您可能需要看看 drf-spectaulous,这是一个积极维护的新库,它与该项目的大部分目标相同,同时使用 OpenAPI 3.0 模式.

OpenAPI 3.0 在可描述的 API 类型方面比 2.0 提供了更多的灵活性。 drf-yasg 不太可能很快(如果有的话)获得对 OpenAPI 3.0 的支持。

这意味着该软件包

drf-yasg
不支持
OAS3
,因此,它不会支持“多个文件上传”功能。

您可以考虑从

drf-yasg
迁移到
drf-spectacular
。但是,还要注意的是,
drf-spectacular
也以不同的方式处理 FileUpload。


0
投票

class DockerExperienceViewSet(viewsets.ModelViewSet): @swagger_auto_schema( manual_parameters=[ openapi.Parameter( name='files', in_=openapi.IN_FORM, type=openapi.TYPE_ARRAY, items=openapi.Items(type=openapi.TYPE_FILE, format=openapi.FORMAT_BINARY), description="List of files to upload", required=True ), ], responses={201: 'Files uploaded successfully!'} ) de upload_multiple_files(self, request, doctor_id=None, **kwargs): // do your logic return Response(status=201)

使用此代码片段,您将能够在 drf-yast 中上传多个文件

© www.soinside.com 2019 - 2024. All rights reserved.