Удаление записей Django ImageField и FileField, файлы которых не найдены на сервере

Недавно я потерял несколько файлов в папке media, и я хочу удалить объекты image field/FileField, файлы которых были удалены, во всех моделях моего приложения.

Я пробовал django-cleanup, но, похоже, он делает обратную операцию, то есть удаляет файлы на сервере, объекты которых были удалены из базы данных.

Вы можете написать команду управления для этого, вот способ, как это сделать

Class cleanup(BaseCommand):
    def handle(self,options):
         for obj in Files.objects.all():
             if os.path.exists(settings.MEDIA_DIR+ obj.filename): continue
             obj.delete()

Обратите внимание, что поле FileField будет ложным, если файл отсутствует, поэтому вы можете использовать следующее простое решение:

for instance in ModelWithFileField.objects.all():
    if bool(instance.file_field):
        continue
    instance.delete()

Вы даже можете сделать это в оболочке django, так что вам не придется писать для этого скрипт.

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