删除在服务器上找不到文件的Django ImageField和FileField记录

Delete Django ImageField and FileField records whose files are not found on the server

我最近在我的媒体文件夹中丢失了一些文件,我想在我的应用程序的所有模型中删除其文件已被删除的图像 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 中完成 shell,因此您不必为其编写脚本。