Как удалить старое изображение когда обновление ImageField?

Я использую Django для создания фото-сайта запаса, у меня есть ImageField в моей модели, проблема состоит в том, что, когда пользователь обновляет поле изображений, файл исходного изображения не удален из жесткого диска.

Как я могу удалить старые изображения после обновления?

31
задан eos87 23 February 2018 в 17:43
поделиться

2 ответа

Вам придется удалить старый образ вручную.

Абсолютный путь к изображению хранится в your_image_field.name . Таким образом, вы должны сделать что-то вроде:

os.remove(your_image_field.name)

Но для удобства вы можете использовать связанный объект FieldFile, который обеспечивает легкий доступ к базовому файлу, а также предоставляет несколько удобных методов. См. http://docs.djangoproject.com/en/dev/ref/models/fields/#filefield-and-fieldfile

16
ответ дан 27 November 2019 в 21:44
поделиться

Используйте этот пользовательский метод сохранения в своей модели:

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)

Он работает для меня на моем сайте. Эта проблема тоже беспокоила меня, и я не хотел создавать сценарий очистки вместо хорошей бухгалтерии. Сообщите мне, если с этим возникнут проблемы.

15
ответ дан 27 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: