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