При удалении изображения из модели оно удаляется из папки мультимедиа?
Я делаю проект сайта социальной сети, чтобы попрактиковаться в 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
ссылкой на этот файл.