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

thtygnil  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(329)

我试图从 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

yrwegjxp

yrwegjxp1#

OpenAPISchemaOAS)2不支持多个文件上传(参见问题#254);但是OAS 3支持它(您可以在live swagger editersee this result)上使用this YML spec)。
说到真实的的问题,在drf-yasg的文档中有一个部分,
如果您希望将Swagger/OpenAPI支持添加到新项目中,您可能需要查看drf-spectacular,它是一个积极维护的新库,在使用OpenAPI 3.0模式时与本项目的大部分目标相同。
OpenAPI 3.0在API类型方面提供了比2.0更多的灵活性。drf-yasg不太可能很快获得对OpenAPI 3.0的支持。
这意味着包drf-yasg不支持OAS3,因此它不支持 “多文件上传” 功能。
您可以考虑从drf-yasg迁移到drf-spectacular。但是,还要注意,drf-spectacular也以不同的方式处理FileUpload。

相关问题