Нет такого файла или каталога: 'profile_pics/img.jpg'

Когда пользователь пытается загрузить фотографию профиля, отображается эта ошибка. Однако изображение успешно загружается в базу данных и отображается в приложении. Я полагаю, что ошибка связана с перенаправлением после отправки формы, но я не могу понять, в чем дело. Я недавно настроил свое приложение с aws s3 buckets, так что это также может быть как-то связано с этим, но изображения успешно загружаются и извлекаются из ведра, так что, скорее всего, это не связано.

enter image description here enter image description here

view:

def profile(request):
    if request.method == 'POST':
        p_form = ProfileUpdateForm(request.POST,
                                   request.FILES,
                                   instance=request.user.profile)
        if p_form.is_valid():
            p_form.save()
            messages.success(request, f'Your account has been updated!')
            return redirect('profile')

    else:
        p_form = ProfileUpdateForm(instance=request.user.profile)

    context = {
        'p_form': p_form
    }

    return render(request, 'users/profile.html', context)

модель:

class Profile(models.Model):
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    ....
    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.name)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

html

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <fieldset class="form-group">
        <legend class="border-bottom mb-4">Update Profile</legend>
        {{ p_form|crispy }}
    </fieldset>
    <div class="form-group">
        <button class="action-btn" type="submit">Update</button>
    </div>
</form>

Вы можете использовать его для изменения размера или сжатия изображения.

def compress(image):
                im = Image.open(image)
                out_put_size = (300,300)
                im.thumbnail(out_put_size)
                # create a BytesIO object
                im_io = BytesIO() 
                # save image to BytesIO object
                im = im.resize([500,500])
                #resize image
                im = im.convert("RGB")
                im = im.save(im_io,'JPEG', quality=50) 
                # create a django-friendly Files object
                new_image = File(im_io, name=image.name)
                return new_image

class Profile(models.Model):
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    
   def save(self, *args, **kwargs):
      #image compression start
      if self.image:
         # call the compress function
         new_image = compress(self.image)
         # set self.image to new_image
         self.image = new_image
      #image compression end 
      super(Profile,self).save(*args, **kwargs)
Вернуться на верх