Django Reset Serializer теряет файл и выдает ошибку проверки - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть простой сериализатор.

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

Основная проблема заключается в том, что он вызывает ошибку проверки, даже если Я предоставил файл сериализатору .Представление вернет сообщение о том, что данные неверны.Такое поведение кажется неправильным.Файл, который я ясно передаю serialzier, волшебным образом исчезает, что приводит к ошибке проверки.

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(raise_exception=True)

        ...

Ответы конечной точки:

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

Это поведение странно для меня.В документации сказано, что request.data содержит как file, так и non-file объект.Мы можем даже видеть это в моем print.Вопрос в том, почему мой serialzier не может этим воспользоваться?Этот файл волшебным образом исчезает.

Я использую этот сериализатор на мой взгляд:

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 он говорит, что file - это None.

1 Ответ

0 голосов
/ 12 декабря 2018

данные сериализатора будут доступны через 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)
...