Загрузка файла Django в REST-фреймворк : ошибка типа: требуется байт-подобный объект, а не «Временный загруженный файл»

#django #django-rest-framework

Вопрос:

Я хочу создать представление для создания поста.

Существуют различные функции для написания статьи, в частности, функция загрузки файлов. Итак, я использую составную часть и переопределяю функцию создания в сериализаторе. как показано ниже:

  1. сначала создайте экземпляр.
  2. сохраните файл в созданном экземпляре.

но когда я сохраняю, возникает ошибка:

Ошибка типа: требуется байтообразный объект, а не «Временный загруженный файл».

но не знаю, как преобразовать «TemporaryUploadedFile» в «байтоподобный объект».

api_view>

 class PostCreate(generics.CreateAPIView):

    queryset = Post.objects.all()
    serializer_class = PostSerializer
    # parser_classes = (FileUploadParser,)
    # parser_classes = (FormParser, MultiPartParser)

    parser_classes = (MultiPartParser,)

    # def put(self, request, format = None):
    #     post_files = request.data['post_files']

    def post(self, request, *args, **kwargs):
        serializer = PostSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 

Сериализатор>

 class PostSerializer(serializers.ModelSerializer):
    post_files = serializers.FileField(required=False)

    def create(self, request):
        print("@@@@@request")
        print(request)
        post_files = request.pop("post_files")
        print("@@@ post_files.path : "   post_files.temporary_file_path())
        print("@@@ post_files.name : "   str(post_files))
        instance = Post.objects.create(**request)

        # files = open(post_files.temporary_file_path(), "wb ")
        # for chunk in post_files.chunks():
        #     files.write(chunk)
        # files.close()

        instance.post_files.save(str(post_files), ContentFile(files), save=True)
        return instance