2012-01-16 70 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