В django как удалить изображения, которых нет в базах данных?
Я создал блог-сайт на Django. Я разместил на сайте несколько статей. После удаления статьи, статья удаляется, но медиафайлы не удаляются. Я хочу удалить все медиафайлы, которые не относятся к статьям.
Я знаю, я могу создать Django post-delete signal и удалять медиафайлы оттуда. Но это будет применимо только для будущего использования. Я хочу удалить предыдущие медиафайлы, которых нет в моей базе данных.
сначала установите вот это:
pip install django-cleanup
Затем, добавьте это в файл настроек внутри вашего установленного_приложения:
'django_cleanup.apps.CleanupConfig'
Это удалит ваши медиафайлы.
Просто используйте эту программу для удаления неиспользуемых медиафайлов.
Эта команда удаляет все медиафайлы из каталога MEDIA_ROOT, на которые больше не ссылается ни одна из моделей из installed_apps.
import os
from django.core.management.base import BaseCommand
from django.conf import settings
class Command(BaseCommand):
def handle(self, *args, **options):
physical_files = set()
db_files = set()
media_root = getattr(settings, 'MEDIA_ROOT', None)
if media_root is not None:
for relative_root, dirs, files in os.walk(media_root):
for file_ in files:
relative_file = os.path.join(os.path.relpath(relative_root,
media_root), file_)
physical_files.add(relative_file)
deletables = physical_files - db_files
if deletables:
for file_ in deletables:
os.remove(os.path.join(media_root, file_))