Django rest framework Django rest swagger文档将选择文件显示为字符串

Django rest framework Django rest swagger文档将选择文件显示为字符串,django-rest-framework,django-rest-swagger,Django Rest Framework,Django Rest Swagger,我正在使用django rest框架django rest swagger创建简单的swagger文档 Python: 3.6 Django: 3.0.3 django-rest-swagger: 2.2.0 djangorestframework: 3.11.0 这是模型。py class Image(models.Model): file = models.ImageField(upload_to='photos', null=True, blank=True) is_ac

我正在使用django rest框架django rest swagger创建简单的swagger文档

Python: 3.6
Django: 3.0.3
django-rest-swagger: 2.2.0
djangorestframework: 3.11.0
这是模型。py

class Image(models.Model):
    file = models.ImageField(upload_to='photos', null=True, blank=True)
    is_active = models.BooleanField(default=False, null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    class Meta:
        db_table = 'image'

    def __str__(self):
        return self.file.name
class ImageSerializer(serializers.ModelSerializer):

    class Meta:
        model = Image
        fields = ('id', 'file', 'created_at')
from rest_framework import generics
from rest_framework.parsers import FormParser, MultiPartParser, FileUploadParser

from api.serializers import ImageSerializer
from api.models import Image


class ImageView(generics.CreateAPIView):
    serializer_class = ImageSerializer
    parser_classes = (FileUploadParser, )

    def post(self, request, *args, **kwargs):
        """
           Image Moodel
           ---
           parameters:
               - name: file
                 type: file
           responseMessages:
               - code: 201
                 message: Created
       """
        file = request.data.get('file')
        image = Image(file=file, name=file.name)
        return self.create(request, *args, **kwargs)
我创建了序列化程序.py

class Image(models.Model):
    file = models.ImageField(upload_to='photos', null=True, blank=True)
    is_active = models.BooleanField(default=False, null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    class Meta:
        db_table = 'image'

    def __str__(self):
        return self.file.name
class ImageSerializer(serializers.ModelSerializer):

    class Meta:
        model = Image
        fields = ('id', 'file', 'created_at')
from rest_framework import generics
from rest_framework.parsers import FormParser, MultiPartParser, FileUploadParser

from api.serializers import ImageSerializer
from api.models import Image


class ImageView(generics.CreateAPIView):
    serializer_class = ImageSerializer
    parser_classes = (FileUploadParser, )

    def post(self, request, *args, **kwargs):
        """
           Image Moodel
           ---
           parameters:
               - name: file
                 type: file
           responseMessages:
               - code: 201
                 message: Created
       """
        file = request.data.get('file')
        image = Image(file=file, name=file.name)
        return self.create(request, *args, **kwargs)
这里还有image\u view.py

class Image(models.Model):
    file = models.ImageField(upload_to='photos', null=True, blank=True)
    is_active = models.BooleanField(default=False, null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    class Meta:
        db_table = 'image'

    def __str__(self):
        return self.file.name
class ImageSerializer(serializers.ModelSerializer):

    class Meta:
        model = Image
        fields = ('id', 'file', 'created_at')
from rest_framework import generics
from rest_framework.parsers import FormParser, MultiPartParser, FileUploadParser

from api.serializers import ImageSerializer
from api.models import Image


class ImageView(generics.CreateAPIView):
    serializer_class = ImageSerializer
    parser_classes = (FileUploadParser, )

    def post(self, request, *args, **kwargs):
        """
           Image Moodel
           ---
           parameters:
               - name: file
                 type: file
           responseMessages:
               - code: 201
                 message: Created
       """
        file = request.data.get('file')
        image = Image(file=file, name=file.name)
        return self.create(request, *args, **kwargs)
图像上传显示为字符串


如何解决这个问题?

快速查阅Swagger文档,根据您针对哪个OpenAPI版本,这似乎是正确的行为。OpenAPI规范的版本3不支持文件类型的概念,而v2则有文件格式的概念。考虑到定义JSON的RFC有一个有限的值类型列表,这些值类型被视为有效JSON的一部分,这是有意义的

可以找到更多信息

附录:我不能直接说明您用于生成文档的框架,但对于图像/文件上载,可以使用
format
属性指定文件的上载方式,即二进制、base64编码。您可以找到有关文件上载和OpenAPI规范的更多信息

查看您的框架文档,它似乎还针对较旧的Swagger 1.2/OpenAPI v2规范,在这种情况下,这仍然是正确的行为,如上的OpenAPI v2中所述