2012-07-12 62 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