Django PostUpdateView не сохраняет изображение Выброс ValueError
В файле models.py у меня есть:
class Post(models.Model):
title = models.CharField(max_length=100)
post_content = models.TextField(max_length=10000)
date_posted= models.DateTimeField(auto_now_add=True)
image = models.ImageField(upload_to='blog-post-images/', blank=True, null=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
if img.height > 500 or img.width > 500:
if img.height > img.width:
factor=500/img.height
nH=500
nW=img.width*factor
output_size= (nH,nW)
if img.width > img.height:
factor=500/img.width
nW=500
nH=img.height*factor
output_size= (nH,nW)
else:
output_size=(500,500)
img = ImageOps.exif_transpose(img)
img.thumbnail(output_size)
img.save(self.image.path)
А затем в представлениях у меня есть:
class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Post
fields = ['title', 'post_content', 'image']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
def test_func(self):
post=self.get_object()
if self.request.user == post.author:
return True
return False
На сервере страница отображает html с полями формы просто отлично, позволяет мне выбрать путь к изображению, но затем ошибка, которую я получаю при фактической отправке пути к изображению, такова: "ValueError at /home/post/10/update/ Атрибут 'image' не имеет связанного с ним файла." И изображение не сохраняется. Однако, когда я делаю это через администратора, изображение сохраняется. У меня image blank и null, потому что я хочу, чтобы image был необязательным атрибутом. Может ли это быть причиной моих проблем? Нужно ли добавить что-то дополнительное в класс PostUpdateView? Спасибо!
Я нашел ответ на свой вопрос.
Все, что потребовалось, это добавить enctype="multipart/dorm-data" к тегу form в html-файл:
<form method="POST" class="form-parent" enctype="multipart/form-data">