Django Reset Serializer丢失文件并引发验证错误

时间:2018-12-12 07:33:13

标签: django django-rest-framework

我有一个简单的序列化器。

class MySerializer(serializers.Serializer):
    file = serializers.FileField()

主要问题是,即使我已将文件提供给序列化程序,它也会引发验证错误。该视图将返回消息,指出数据无效。此行为似乎是错误的。我清楚地传递给serialzier的文件消失了,导致验证错误。

MyView(APIView)类:

    permission_classes = ()
    parser_classes = (MultiPartParser,)

    def post(self, request):
        print(request.data)
        # <QueryDict: {'file': [<InMemoryUploadedFile: some_file.png (image/png)>]}>
        serializer = MySerializer(data=request.data)

        serializer.is_valid(raise_exception=True)

        ...

端点响应:

{
  "file": [
    "This field can not be null."
  ]
}

这种行为对我来说很奇怪。文档说request.data同时包含filenon-file对象。我们甚至可以在我的print中看到它。问题是为什么我的serialzier无法使用它?这个文件神奇地消失了。

我在自己的视图中使用此serializser:

class MyView(APIView):

    permission_classes = ()
    parser_classes = (MultiPartParser,)

    def post(self, request):
        print(request.data)
        # <QueryDict: {'file': [<InMemoryUploadedFile: some_file.png (image/png)>]}>
        serializer = MySerializer(data=request.data)
        serializer.is_valid()

        print(serializer.data)
        # {'file': None}

通过一点测试,即使将数据传递到包含文件的序列化程序,我仍然看到。但是在检查serializer.data后,它说fileNone

1 个答案:

答案 0 :(得分:0)

序列化器数据将通过serializer.validated_data

访问
class MyView(APIView):

   permission_classes = ()
   parser_classes = (MultiPartParser,)

   def post(self, request):
      print(request.data)
      # <QueryDict: {'file': [<InMemoryUploadedFile: some_file.png (image/png)>]}>
     serializer = MySerializer(data=request.data)
     serializer.is_valid()

    print(serializer.validated_data)