Форма Django недействительна, когда я добавляю область изображения

avatar
Turing
8 августа 2021 в 20:22
25
0
0

Я пытаюсь создать раздел обновления профиля на веб-сайте. В этом разделе есть имя пользователя, электронная почта и область изменения изображения. Имя пользователя и электронная почта работают, а «Изображение» - нет. Работает только тогда, когда я пытаюсь ввести адрес электронной почты и пароль, но когда я добавляю поле «Изображение» и нажимаю кнопку «Обновить», изменений нет

Мои взгляды:

@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()

У кого-нибудь есть идея?

Источник

Ответы (0)