Python Django REST文件上载序列化程序返回{';文件';:无}

Python Django REST文件上载序列化程序返回{';文件';:无},python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我一直在做一个Django项目,需要上传文件。我在使用django rest框架的应用程序设计中使用API方法。我创建了模型、APIView和序列化程序,但不幸的是,每次请求通过序列化程序时,upload.data都返回{'file':None}。如果我只使用request.FILES['file'],它返回文件没有问题,但我想使用序列化数据。我在前端使用dropzone js上传文件。下面是我的代码 HTML api/url.py urlpatterns = [ url(r'^file

我一直在做一个Django项目,需要上传文件。我在使用django rest框架的应用程序设计中使用API方法。我创建了模型、APIView和序列化程序,但不幸的是,每次请求通过序列化程序时,upload.data都返回{'file':None}。如果我只使用request.FILES['file'],它返回文件没有问题,但我想使用序列化数据。我在前端使用dropzone js上传文件。下面是我的代码

HTML

api/url.py

urlpatterns = [
    url(r'^file/', FileImport.as_view(), name='file'),
]
views.py

class FileImport(APIView):
    parser_classes = (MultiPartParser, FormParser,)
    serializer = ImportSerializer

    def post(self, request, format=None):
        upload = self.serializer(data=request.FILES)

        if upload.is_valid():
            file = FileUpload(file=upload.data['file'], uploaded_by=request.user.profile)
            file.save()
            return Response({'success': 'Imported successfully'})
        else:
            return Response(upload.errors, status=400)
序列化程序.py

class ImportSerializer(serializers.Serializer):
    file = serializers.FileField()
models.py

class FileUpload(models.Model):
    file = models.FileField(upload_to='files/%Y/%m/%d')
    date_uploaded = models.DateTimeField(auto_now=True)
    uploaded_by = models.ForeignKey('UserProfile', blank=True, null=True)

这将有助于了解您是如何上传文件的。如果您使用的是多部分/表单数据请求,并且正确地为“file”提供了json,那么最有可能的情况是该文件由于某种原因未通过验证

如果可以,从可浏览的api进行测试也可能会有所帮助(因为这样可以保证您的请求没有问题)

编辑:

问题是调用需要使用的
is\u valid()

后,应该使用
validated\u data
字段,而不是
data
字段。我使用的是dropzone js。我已经更新了我的初始帖子,在前端包含了我的代码。看起来应该正确上传多部分/表单数据。您是否尝试过查看
upload.validated_数据['file']
?这通常是调用
is\u valid()
后访问序列化程序数据的方式。谢谢,就是这样!我只是以错误的方式访问序列化数据。
class ImportSerializer(serializers.Serializer):
    file = serializers.FileField()
class FileUpload(models.Model):
    file = models.FileField(upload_to='files/%Y/%m/%d')
    date_uploaded = models.DateTimeField(auto_now=True)
    uploaded_by = models.ForeignKey('UserProfile', blank=True, null=True)