Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Мусорные картинки при обновлении имеющейся

#django


Думаю это большая проблема в Django, но панацеи (как я понимаю) нет.

У меня есть модель пользователя с полем ImageField для аватарки. Из личного кабинета
пользователь меняет аватарку передавая через форму новую картинку. Все хорошо, аватарка
изменена и храниться у меня в папке, но старая аватарка(фаил) так же остался в папке!

Есть ли универсальный способ чистить "устаревшие" картинки? Возможно требуется переопределение
метода save() когда я сохраняю форму в view? Я не совсем понимаю как это все сделать...
    


Ответы

Ответ 1



Да, такая особенность у django действительно имеется - старые картинки не удаляются. Проблему можно решить несколькими методами Переопределить метод save. Суть заключается в том, что нужно получить объект, хранящийся на сервере, проверить различаются ли между ними изображения и удалить старое: def save(self, *args, **kwargs): try: this = MyModelName.objects.get(id=self.id) if this.MyImageFieldName != self.MyImageFieldName: this.MyImageFieldName.delete() except: pass super(MyModelName, self).save(*args, **kwargs) Отслеживать сигналы pre_save и post_save соответственно манипулируя удалением из них (сложно) Время от времени проходиться периодической задачей по файлам в папке и всем полям FileField, выискивая и удаляя лишние Но как по мне лучше всего с этой задачей справляется дополнение django cleanup. Поэтому советую установить его и забыть про эту проблему

Комментариев нет:

Отправить комментарий