Django REST框架drf-yasg中Swagger多文件上传ListField序列化器错误。

7

我正在尝试使用 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


我目前遇到了这个问题。你已经解决了吗? - PercySherlock
1个回答

4
OpenAPISchemaOAS)2不支持多文件上传(参见问题#254),但OAS 3支持它(您可以在实时swagger编辑器上使用此YML规范请参阅此结果))。

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

如果您想要将Swagger/OpenAPI支持添加到新项目中,您可能需要查看drf-spectacular,这是一个活跃维护的新库,与此项目共享大部分目标,同时使用OpenAPI 3.0模式描述。

OpenAPI 3.0提供了比2.0更多的灵活性,可以描述各种类型的API。 drf-yasg不太可能很快或从不支持OpenAPI 3.0。

这意味着包drf-yasg不支持OAS3,因此它将不支持"多文件上传"功能。

您可以考虑从drf-yasg迁移到drf-spectacular。但是,请注意,drf-spectacular也以不同的方式处理FileUpload。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接