Запрос пустых данных с помощью formData - Django Rest Framework

Я пытаюсь сохранить строки, плавающие символы и изображение через POST запрос, сделанный к бэкенду Django Rest Framework:

# My view:

class CreatePost(APIView):
    # tried with and without parser:
    # parser_classes = [FormParser, MultiPartParser]

    def post(self, request):
        serializer = PostSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save(user_id=request.user.pk)
            return Response(serializer.data, status=201)
        return Response(serializer.errors, status=400)


# My serializer:

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ("x", "y")

И мой JS фронтенд:

const postBody = new FormData();
postBody.append('x', 'someValue');
postBody.append('y', 'someValue');

fetch('/api/v1/post', {
    method: 'post',
    body: postBody,
    credentials: 'same-origin',
    headers: {
      'X-CSRFToken': getCookie('csrftoken'),
      'Content-Type': 'multipart/form-data'
    }
  }

Однако, отправка как 'Content-Type': 'multipart/form-data' не показывает никаких значений в request.data в моем бэкенде. Отправка как application/json работает, но не работает, когда одно из полей является изображением.

Как я могу обработать и текст, и изображение с помощью form-data? Я пробовал использовать парсеры (FormParser и MultiPartParser) без успеха.

Как сказано в https://docs.djangoproject.com/en/3.2/topics/http/file-uploads/#basic-file-uploads :

Обратите внимание, что request.FILES будет содержать данные только в том случае, если метод запроса был POST, по крайней мере одно поле файла было действительно размещено, и у разместившего запрос есть атрибут enctype="multipart/form-data". В противном случае request.FILES будет пустым.

Для файла в drf, FileUploadParser может помочь. doc в https://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser

Вернуться на верх