Физическое удаление файла при удалении записи с models.FileField

По умолчанию, к сожалению, Django физически не удаляет файл при удалении записи с FileField и его производными ( потомками ). Сейчас я покажу вам как это делать самим.

class MyFileModel(models.Model):
    file_field_name = FileField(...)

    def delete(self, *args, **kwargs):
        # До удаления записи получаем необходимую информацию
        storage, path = self.file_field_name.storage, self.file_field_name.path
        # Удаляем сначала модель ( объект )
        super(MyFileModel, self).delete(*args, **kwargs)
        # Потом удаляем сам файл
        storage.delete(path)

Вот и всё. Единственное, что это не решает проблему с удалением самого файла без удаления модели. С этим мы разберемся позже.

Kamo Petrosyan Автор

Комментарии

    Гость

    (Август 2, 2015 - 12:59 пп)

    То есть всё равно всё сводится к физическому удалению — сразу или по крону — зависит от размера базы и нагруженности.

Добавить комментарий

Ваш e-mail не будет опубликован.