Удаление записей 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, так что вам не придется писать для этого скрипт.