Загрузка изображения профиля из React в Django
Я пытаюсь загрузить изображение из моего front-end (React) в Django, но получаю ошибку, Bad request, возможно потому, что сериализатор не принимает данные изображения.
Вот как данные попадают в бэкенд <QueryDict: {'id': ['1'], 'image': ['[объект Object]']}>
Это мое мнение.
class ProfilePictureView(APIView):
parser_classes = [MultiPartParser, FormParser]
def post(self, request):
print(request.data)
ipdb.set_trace()
serializer = ProfilePictureSerializers(data=request.data)
if serializer.is_valid():
try:
picture = User.objects.get(id=request.data['id'])
picture.image = request.data['image']
picture.save()
serializer = ProfilePictureSerializers(picture)
return Response(serializer.data, status=status.HTTP_200_OK)
except:
return Response({"Detail": "Not found"}, status=status.HTTP_404_NOT_FOUND)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
Это моя модель.
def upload_to(instance, filename):
return 'media/{filename}'.format(filename=filename)
class User(AbstractUser):
image = models.ImageField(_("Image"),null=True, blank=True, upload_to=upload_to, default='media/default.png')
Сериализатор.
class ProfilePictureSerializers(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'image')
И моя заявка на фронтенде.
const config = {headers: {'content-type': 'multipart/form-data'}};
export const ProfilePictureThank = (UserData, setError) => (dispatch) => {
let formData = new FormData();
formData.append("id", UserData.id)
formData.append("image", UserData.image)
axios
.post(
`${url_local}/api/profile/picture/`, formData, config)
.then((info) => {
dispatch(postUserProfilePicture(info.data));
})
.catch((error) => {
setError(true);
dispatch(postUserProfilePicture(error));
});
};
А вот приложение профиля.
const UserData = {
id: userId,
image: photo
}
const changeImage = async (e) => {
setPhoto({image: e.target.files})
dispatch(await ProfilePictureThank( UserData, setError));
};
<section className="profile-picture-container">
<div className="profile-picture-item">
<img className="profile-photo" src={photo} />;
<label for="upload" className="change-photo-button" >
Trocar Imagem
<input name="image" encType="multipart/form-data" type="file" id="upload" onChange={changeImage} />
</label>
</div>
<div className="profile-picture-item">
Bem vindo, {name}
</div>
</section>
Если я удалю serializer.is_valid() из моего представления, я получу статус 200, но изображение не сохранится.
Я перепробовал множество решений, которые нашел здесь на stack overflow, но ни одно из них не работает в моем случае.
Если кто-то может помочь мне, я буду очень признателен.