В 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_))
Вернуться на верх