Проблема в том, что мой код заставляет пользователя менять изображение, когда он хочет изменить только содержание или заголовок своей статьи.
Привет всем У меня есть проект блог платформы, пользователь может добавлять, и редактировать блог. Блог содержит (title, slug, contenet, image), я использовал Django и Django Rest Framework для создания сайта, а для frontend ReactJS. Моя проблема в том, что когда я редактирую блог, я не могу редактировать блог до изменения изображения, но для контента и заголовка я могу изменить один из них, но я не могу обновить блог, пока не изменю изображение, Это ошибка, когда просто обновляется заголовок без изменения изображения
model.py
def upload_path(instance, filename):
return 'img/{filename}'.format(filename=filename)
class Blog(models.Model):
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique=True, null=True)
content = models.TextField()
published = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='blog_blog')
objects = models.Manager() # default manager
image = models.ImageField(_("Image"), upload_to=upload_path, null=True)
class Meta:
def __str__(self):
return self.title
view.py
class EditBlog(generics.UpdateAPIView):
permission_classes = [permissions.IsAuthenticated, IsOwnerOrReadOnly]
serializer_class = BlogSerializer
queryset = Blog.objects.all()
в React edit.js
Любая подсказка или руководство будут очень полезны для меня, чтобы завершить проект, потому что я застрял в нем более чем на две недели.
Спасибо
Проблема заключается в handleSubmit, вы не можете прочитать значение postimage, если оно равно null:
const handleSubmit = (e) => {
e.preventDefault();
console.log(formData);
let ss = new FormData();
ss.append('title', formData.title);
ss.append('slug', formData.slug);
ss.append('content', formData.content);
if (postimage != null) {
ss.append('image', postimage.image[0]);
}
axiosInstance.patch(`admin/edit/`+ id + '/', ss, {
headers:{
Authorization: `JWT ${localStorage.getItem('refresh_token')}`
},
},)
.then((res) => {
// navigate('/admin/');
});
};
Не забудьте установить required=False для поля image в BlogSerializer.