Как заставить Django хранить уже загруженное изображение обложки для пользователя без его удаления

Как заставить Django хранить уже загруженное изображение обложки пользователя, не удаляя его при загрузке нового изображения, а просто заменяя его? У меня возникла проблема, когда я пытаюсь понять, как сохранить старые изображения обложки при добавлении новых. Происходит так, что когда я загружаю новое изображение обложки, оно просто удаляет предыдущее из базы данных. Вот мои модели изображений обложки:

class AccountCover(models.Model):
    account = models.ForeignKey(Account,on_delete=models.CASCADE)
    cover_image = models.ImageField(max_length=255,upload_to=get_cover_cover_image_filepath,default=get_default_cover_image,)

Мой view.py

 cover = AccountCover.objects.filter(account=account.id).first()
    if request.user:
        forms = CoverImageForm(request.POST, request.FILES,instance=cover,
                        initial = {'cover_image':cover.cover_image})
      
    if request.method == 'POST':
        f = CoverImageForm(request.POST, request.FILES,instance=cover)
        if f.is_valid():
             data = forms.save()
             data.account = cover.account
             data.save()
             return redirect('account:edit', account.id)
            
    else:
        f = CoverImageForm()
    context['f'] = f 

Вы можете сохранить старые экземпляры AccountCover, заставляя форму каждый раз сохранять новый экземпляр. Просто удалите аргумент instance в форме, и не забывайте сохранять форму с commit=false перед тем, как установить внешний ключ account.

forms = CoverImageForm(request.POST, request.FILES, initial={'cover_image': cover.cover_image})

# ...
data = forms.save(commit=False)
data.account = cover.account
data.save()

Полагаю, вам нужно сохранить старую запись базы данных, а не только файл изображения. Файл изображения, не имеющий никакого отношения к реестру пользователя, не имеет никакой пользы.

Вернуться на верх