Я использую Django для создания фото-сайта запаса, у меня есть ImageField в моей модели, проблема состоит в том, что, когда пользователь обновляет поле изображений, файл исходного изображения не удален из жесткого диска.
Как я могу удалить старые изображения после обновления?
Вам придется удалить старый образ вручную.
Абсолютный путь к изображению хранится в your_image_field.name
. Таким образом, вы должны сделать что-то вроде:
os.remove(your_image_field.name)
Но для удобства вы можете использовать связанный объект FieldFile, который обеспечивает легкий доступ к базовому файлу, а также предоставляет несколько удобных методов. См. http://docs.djangoproject.com/en/dev/ref/models/fields/#filefield-and-fieldfile
Используйте этот пользовательский метод сохранения в своей модели:
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)
Он работает для меня на моем сайте. Эта проблема тоже беспокоила меня, и я не хотел создавать сценарий очистки вместо хорошей бухгалтерии. Сообщите мне, если с этим возникнут проблемы.