2012-07-12 32 views
11

我有一个型号PictureImageField。删除Picture的实例时,不会删除在ImageField中设置的文件。删除带有ImageField字段的对象时图像文件未被删除

这是一个错误?我该怎么做?

+0

什么是您的看法是什么样子? – rh0dium 2012-07-12 16:38:55

+0

我没有看法。 – jul 2012-07-12 16:40:00

+0

[我如何在从数据库/模型中删除对象时让Django Admin删除文件?](http://stackoverflow.com/questions/5372934/how-do-i-get-django-admin -to-delete-files-when-i-remove-an-object-from-the-the-the-datab) – 2012-07-12 16:49:15

回答

25

删除与FileField s和ImageField关联的文件是故意在Django 1.3中删除。请参阅ticket #6456。 Django广泛使用事务来防止数据损坏,如果请求出现问题。如果删除事务是滚动备份的,则在文件从文件系统中删除后,您现在有一条指向一个不存在的文件的记录。要求自动删除返回的所有票都被概括地标记为“不会修复”,所以这不会改变。

有关解决方法,请参阅this previous StackOverflow question

0

假设?

class Picture(models.Model): 
    image = ImageField(blank=True, null=True, upload_to="pics") 

    def delete(self, *args, **kwargs): 
     self.image.delete() 
     super(Picture, self).delete(*args, **kwargs) 

然后可以手动创建和删除这个..

image = "./image.jpg" 
picture = Picture.objects.create(image=File(open(image, "r")) 
picture.save() 

然后将其删除?

picture.delete()

HTH

+5

虽然这个答案已经很老了:第一个codeblock中的第5行应该是'self.image.delete()' – Tim 2014-10-17 11:25:16

+2

它更好地使用信号,因为它不适用于'Picture.objects.filter(...)。delete()'。 – Sassan 2016-09-10 08:38:52