Страницы

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

среда, 21 ноября 2018 г.

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

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


Ответ

Да, такая особенность у 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. Поэтому советую установить его и забыть про эту проблему

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

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