Django Rest Framework не может разобрать данные изображения с фронт-энда React

У меня есть front end, где пользователь может создать 'Post' с изображением или без него. Если запрос выполняется без изображения, объект 'Post' создается, и с этим нет никаких проблем. Но когда я пытаюсь добавить изображение в запрос поста с помощью Axios и FormData, когда Django получает этот объект, мой Serializer возвращает false для вызова функции is_valid()...

Пример объекта post содержит следующие ключи:

{'text':'some string', 'image': {some_file_object(optional)}}

>

Вот мое мнение:

class PostView(APIView):
permission_classes = (IsAuthenticated,)
parser_class = (MultiPartParser)

def post(self, request):
    user = User.objects.get(username=self.request.user)
    userSerialize = UserGetSerializer(user, partial=True)
    _mutable = request.data.copy()
    _mutable['user'] = userSerialize.data
    print(_mutable)
    serializer = PostSerializer(data=_mutable)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(status=status.HTTP_400_BAD_REQUEST)

Вот мой сериализатор

class PostSerializer (serializers.ModelSerializer):
text = serializers.CharField(max_length=500, required=True)
user = UserSerializer(many=False)
likes = serializers.SerializerMethodField(read_only=True)
image = serializers.ImageField(required=False)

class Meta:
    model = Post
    fields = ('__all__')

def get_likes(self, obj):
    likes = obj.like_set.filter(post=obj.id)
    return LikeSerializer(likes, many=True).data

Вот моя модель:

class Post(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="user",
                         on_delete=models.CASCADE, blank=True)
text = models.TextField(max_length=500)
date_posted = models.DateTimeField(auto_now_add=True)
hidden = models.BooleanField(default=False)
date_hidden = models.DateTimeField(blank=True, null=True)
hidden_by = models.ForeignKey(
    settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True, related_name='hidden_by')
image = VersatileImageField(
    upload_to='post_images/', ppoi_field='image_ppoi', blank=True, null=True)
image_ppoi = PPOIField()

def __str__(self) -> str:
    return self.text

Убедитесь, что вы добавили правильный content-type в заголовок запроса

Ссылка на ответ как отправить файл с помощью Axios Как отправить файл из формы с помощью Axios

Возможно, это связано с используемым вами VersatileImageField. Есть ли у вас особый случай использования, с которым models.ImageField не работает?

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