#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. Поэтому советую установить его и забыть про эту проблему
Комментариев нет:
Отправить комментарий