У меня есть модель с ImageField в нем.Я уже установил upload_to и создал свой собственный класс FileSystemStorage , чтобы сохранить файл с уникальным именем ... однако ...
Эта настройкапозволяет мне загружать и сохранять файл с уникальным именем для каждого файла (что нормально), но мне также нужно, чтобы удалить предыдущий файл, который существовал, например,
Я загружаю файл1.png и он сохраняется как file1_xkdeujg.png (это просто случайная строка)
Затем я захожу в администратор django (используя интерфейс администратора django, так что нужно сделать это через модель) и меняю изображение для этого поля наfileNEW.png
Что должно произойти сейчас:
1) он сохраняет новый файл как fileNEW_fjewiejk.png (уникальная случайная строка при каждом сохранении изображения) - done
2) сохраняет новый файл в базу данных - выполнено
3) удаляет старый файл - file1_xkdeuig.png - из файловой системы - несделано
В: Кто-нибудь может мне помочь с пунктом 3?
Какой-то код:
class Page(models.Model):
image = models.ImageField(upload_to='pages/', storage=MyFileSystemStorage())
И (заимствовал основную часть этого кода где-то еще ...):
class MyFileSystemStorage(FileSystemStorage):
def get_valid_name(self, name):
file_root, file_ext = os.path.splitext(name)
return "%s_%s%s" % (file_root, rand_key(8), file_ext)
def get_available_name(self, name):
dir_name, file_name = os.path.split(name)
file_root, file_ext = os.path.splitext(file_name)
count = itertools.count(1)
while self.exists(name):
name = os.path.join(dir_name, "%s_%s%s" % (rand_key(32), count.next(), file_ext))
return name