Django : Файловый объект не сериализуется в формате Json

#django #django-rest-framework #django-views

Вопрос:

Я хочу отправить файл обратно в качестве ответа на мой запрос post , но я получаю эту ошибку файловый объект не сериализуется в формате json, так как же мне отправить файл обратно в качестве ответа на мой запрос post :

 @api_view(['GET', 'POST'])
def Upload_list(request):
    if request.method == 'GET':
        queryset = Uploads.objects.all()
        uploads=queryset.filter(owner=request.user)
        serializer = UploadSerializer(uploads, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = UploadSerializer(data=request.data)
      
        if serializer.is_valid():
            serializer.save(owner=request.user)
            respFile=list(File.objects.filter(id=str(File.objects.latest('created_at'))))
            serializers=Fileserializers(respFile,read_only=True,many=True)
            return Response(serializers)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

Комментарии:

1. Для сериализации объекта необходимо использовать сериализатор File

2. Что делать, если вы используете return Response(serializers.data)

3. у меня есть пользовательский сериализатор для объекта file, и я использовал его

Ответ №1:

Вы не можете прикрепить файл в сериализаторе для ответа. Вместо этого вы можете сделать одно из следующих действий.

  1. Вы можете прикрепить файл к заголовку запроса «Размещение содержимого»

    ответ[‘Расположение содержимого’] = ‘вложение; имя файла=»файл.расширение»‘

  2. Отправьте ссылку на файл в своем ключе в сериализатор. Поведение сериализатора по умолчанию.

    {‘file’:’http://absolute_url_to_my_file’}

Комментарии:

1. почему бы и нет, для меня это работает, я использую сериализатор для отправки файлов и их публикации

2. Не во время публикации данных, а при возврате ответа с файлом @Rihabsabri. Если есть и другие способы, если я пропущу, пожалуйста, поправьте меня.

3. при отправке данных я использую сериализатор, чтобы проверить, действительны ли они, и при возврате объекта файла в качестве ответа я использую другой сериализатор, чтобы преобразовать его в собственный тип данных python для отправки.