Метод delete
Метод delete применяется к объекту хранилища и удаляет файл по указанному имени. Метод принимает имя файла в качестве аргумента и возвращает True в случае успешного удаления и False если файл не существует. При удалении файла метод автоматически обрабатывает все необходимые операции, включая закрытие файловых дескрипторов.
Синтаксис
storage.delete(name)
Параметры
Метод принимает следующие параметры:
-
name- имя файла в хранилище (строка), может включать путь относительно корня хранилища
Пример
Давайте удалим файл с именем "documents/report.txt" используя стандартное хранилище:
from django.core.files.storage import default_storage
# Удаляем файл из хранилища
result = default_storage.delete("documents/report.txt")
print(f"File deleted: {result}")
Результат выполнения кода:
"File deleted: True"
Пример
Попробуем удалить несуществующий файл и обработать результат:
from django.core.files.storage import default_storage
# Попытка удалить несуществующий файл
result = default_storage.delete("images/missing.png")
if result:
print("File was deleted successfully")
else:
print("File does not exist or could not be deleted")
Результат выполнения кода:
"File does not exist or could not be deleted"
Пример
Удалим несколько файлов в цикле, используя список имен:
from django.core.files.storage import default_storage
# Список файлов для удаления
files_to_delete = [
"temp/temp1.log",
"temp/temp2.log",
"temp/temp3.log"
]
# Удаляем файлы
for file_name in files_to_delete:
if default_storage.exists(file_name):
deleted = default_storage.delete(file_name)
print(f"Deleted {file_name}: {deleted}")
else:
print(f"File {file_name} does not exist")
Результат выполнения кода:
"Deleted temp/temp1.log: True"
"Deleted temp/temp2.log: True"
"Deleted temp/temp3.log: True"
Пример
Удалим файл, связанный с моделью, используя поле FileField:
from django.core.files.storage import default_storage
from myapp.models import Document
# Находим документ и удаляем его файл
try:
doc = Document.objects.get(id=1)
file_name = doc.file.name
deleted = default_storage.delete(file_name)
if deleted:
doc.file.delete(save=True)
print(f"File {file_name} deleted from storage")
except Document.DoesNotExist:
print("Document not found")
Результат выполнения кода:
"File documents/contract_2025.pdf deleted from storage"
Пример
Используем метод delete с пользовательским хранилищем FileSystemStorage и указанием базовой директории:
from django.core.files.storage import FileSystemStorage
import os
# Создаем хранилище с пользовательской директорией
storage = FileSystemStorage(
location=os.path.join("media", "user_files"),
base_url="/media/user_files/"
)
# Удаляем файл из указанной директории
file_name = "profile/avatar.jpg"
if storage.exists(file_name):
result = storage.delete(file_name)
print(f"Avatar deleted: {result}")
else:
print("Avatar file not found")
Результат выполнения кода:
"Avatar deleted: True"