Django-删除一个模型实例的多个文件并删除此实例
例如,如果我想从have模型实例的文件系统和数据库行中删除所有上载的图像,如下所示: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/") 我做这件事的可能性比你小吗 [举例]
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()