Django-删除一个模型实例的多个文件并删除此实例

Django-删除一个模型实例的多个文件并删除此实例,django,Django,例如,如果我想从have模型实例的文件系统和数据库行中删除所有上载的图像,如下所示: class PictureSet(models.Model): image1 = models.ImageFIeld(upload_to="images/") image2 = models.ImageFIeld(upload_to="images/") image3 = models.ImageFIeld(upload_to="images/") 我做这件事的可能性比你小吗 [举例]

例如,如果我想从have模型实例的文件系统和数据库行中删除所有上载的图像,如下所示:

class PictureSet(models.Model):
    image1 = models.ImageFIeld(upload_to="images/")
    image2 = models.ImageFIeld(upload_to="images/")
    image3 = models.ImageFIeld(upload_to="images/")
我做这件事的可能性比你小吗 [举例]:

picture_set1 = PictureSet.objects.get(id=1)
picture_set1.image1.delete()
picture_set1.image2.delete()
picture_set1.image3.delete()
picture_set1.delete()

删除整个pictureset类无需删除所有内容

如果图片本身停留在那里,只需执行一些清理功能,检查上传文件夹和存储在数据库中的图像链接


希望这有帮助

我建议覆盖模型的删除方法:

def delete(self, *args, **kwargs):
    for field in self._meta.fields:
        if type(field) == models.ImageField:
            image = self.__getattribute__(field.name)
            image.delete()
    super(self.__class__, self).delete(*args, **kwargs)
然后就是:

PictureSet.objects.get(id=1).delete()

picture\u set1.delete()
仅删除数据库行,不删除图像。我没有指定任何额外的delete()函数,所以我认为我需要指定它。我在上一个项目中实现了一个清理函数,每天运行一个,并删除不再需要的任何数据。这就是为什么我像deamon进程这样做的原因?我想,我使用了一个friends项目,它处理特定于时间的任务,这有助于实现我的要求,所以我接受你的回答。但如果我们现在讨论这个问题,我会问,如果有更多字段,你知道如何删除图像吗?@Cris:我编辑了我的答案。现在它应该适用于不同领域的模型。不,这不适用于我,但我不接受你的答案,因为它给了我一些新的面貌。谢谢你。错误是:
AttributeError:'ImageField'对象没有属性“delete”
请注意,当使用
PictureSet.objects.filter(…).delete()
时,将不会调用
.delete()
方法。@Pill:谢谢。函数的作用是:从文件系统中删除右slq列和右图像@曼克斯:我注意到了。函数可以有类似于
delete\u images
的名称,当它在模型结构中指定时,并且没有
super(self.\uuu class\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。
PictureSet.objects.get(id=1).delete()