Форма Django не действительна, когда я добавляю область изображения
Я пытаюсь создать раздел обновления профиля на веб-сайте. В этом разделе есть имя пользователя, электронная почта и область изменения изображения. Имя пользователя и электронная почта работают, но "Изображение" не работает. Работает только когда я пытаюсь ввести email и пароль, но когда я добавляю поле "Изображение" и нажимаю кнопку обновления, изменений не происходит
Мои взгляды:
@login_required
def update_profile(request):
if request.method == 'POST':
u_form = UserUpdateForm(request.POST, instance=request.user)
p_form = ProfileUpdateForm(request.POST,
request.FILES,
instance=request.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(request, f'Your account has been updated!')
return redirect('home')
else:
u_form = UserUpdateForm(instance=request.user)
p_form = ProfileUpdateForm(instance=request.user.profile)
context = {
'u_form': u_form,
'p_form': p_form
}
return render(request, 'accounts/update.html', context)
Модели:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default="default.jpg", upload_to="profile_pics",
null=True, blank=True)
def __str__(self):
return f"{self.user.username} Profile"
def save(self, *args, **kwargs):
super(Profile, self).save(*args, **kwargs)
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)
ШАБЛОН:
<div class="container my-5">
{% include 'fixed/_alert.html' %}
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4 h2">Update Profile</legend>
{{ u_form | crispy }}
{{ p_form | crispy }}
</fieldset>
<div class="form-group">
<input class="btn btn-outline-info btn-block" type="submit" value="Update">
</div>
</form>
И мой signal.py
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
У кого-нибудь есть идея?