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

Я делаю проект сайта социальной сети, чтобы попрактиковаться в Django Меня интересует, удаляет ли удаление изображения из модели также его удаление из папки media?

Например, у меня есть поле в модели User, в которое пользователь может загрузить свою фотографию профиля. Стандартно я сохраняю эту фотографию в папке media, и ссылка на эту папку media используется моей моделью для ее загрузки. Но если пользователь хочет удалить эту фотографию, я использую команду User.profilepic.delete() чтобы удалить ее Означает ли это, что картинка также удаляется из папки media или я должен обрабатывать это отдельно?

Я пытался найти информацию об этом в сети, но не смог найти прямого ответа. Во всех статьях говорится об удалении образа из базы данных. Но ни в одной не говорится об удалении образа из папки.

В Django, когда вы удаляете поле file из экземпляра модели с помощью функции delete(), это не приводит к автоматическому удалению файла из папки media. Вам необходимо отдельно обработать удаление файла из папки с медиафайлами...

Меня интересует, удаляет ли удаление изображения из модели также и его удаление из папки медиа?

Yes, if you use some_user.profilepic.delete(), it will, since some_user.profilepic is a FieldFile [Django-doc] (not to be confused with a FileField [Django-doc]), and we call .delete(…) [Django-doc] on this:

FieldFile.delete(save=True)

Удаляет файл, связанный с данным экземпляром, и очищает все атрибуты поля. Примечание: Этот метод закроет файл, если он был открыт во время вызова delete().

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

Помните, что если вы удалите сам some_user, он не очистит медиафайлы, на которые он ссылается, поэтому:

some_user.delete()  # will not remove the profilepic, but database record
some_user.profilepic.delete()  # remove the file, not the record

Однако удалять файлы таким образом редко бывает хорошей идеей: другие модели могут ссылаться на тот же файл и, таким образом, ссылаться на файл, который больше не существует.

Вы можете работать с командой управления, предоставленной django-unused-media [pypi.org], например, которая будет искать медиафайлы, для которых не существует модель с FileField ссылкой на этот файл.

Вернуться на верх