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
не работает?