2012-01-16 68 views
0

叫我从ImageField的继承与自定义存储这样一个领域:自定义存储删除()方法是在Django

image = PicasaImageField(upload_to=get_upload_to, blank=True, storage=pwcs()) 

当(使用object.delete删除对象与此字段() ,不批量),自定义存储的删除方法不会被调用。试图进行调试时,我无法找到Django在对象的字段中删除文件或实际存储中的任何内容的位置。或者我应该手动删除文件/在一个钩子/写入一个自定义的delete()方法到我的最终模型,将调用实际对象的后期阶段delete()?我没有找到如何用标准的ImageFile +默认文件系统来处理这个问题,但会假定常规文件将被删除。或者我错了?

感谢您的任何见解。

伊戈尔

回答

1

Django 1.3 release notes

当一个模型被删除的FileField的delete()方法将不会被调用。如果您需要孤立的文件的清理工作,你需要自己

处理它如你所说,你可以在自定义删除方法处理这个问题:

def delete(self, *args, **kwargs): 
    image.delete(save=False) 
    super(Foo, self).delete(*args, **kwargs) 

,或者使用接收器功能,这将是即使没有调用object.delete()时也会调用:

@receiver(post_delete, sender=Foo, weak=False) 
def delete_image_on_file(sender, instance, **kwargs): 
    image.delete(save=False) 
+0

谢谢,这就是我所缺少的。 – 2012-01-17 06:54:40

+0

@IgorR我很高兴这是你正在寻找的东西,因此你可以把它标记为公认的答案? – zackdever 2012-01-17 16:03:27