2011-07-29 50 views
2

例如,如果我想刪除的實例的文件系統和數據庫行的所有上傳的圖片有模式是這樣的:Django-刪除模式的一個實例的多文件和刪除這種情況下

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() 

???

回答

2

我建議壓倒一切的模型的刪除方法:

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() 
+0

這就是我所要求的,所以我接受尤奧的答案。但是如果我們現在談論這個問題,我問,你知道如何刪除圖像,如果有更多的領域? – krzyhub

+0

@Cris:我編輯了我的答案。現在它應該適用於不同領域的模型。 – Pill

+0

不,這不適合我,但我不接受你的答案,因爲它給我一些新的面貌。謝謝你。 Erros是:'AttributeError:'ImageField'對象沒有屬性'delete'' – krzyhub

0
picture_set = PictureSet.objects.get(id=1) 
picture_set1.delete() 

刪除整個pictureset類不需要刪除一切......

如果圖片本身呆在那裏只是實現某種清潔功能,檢查對陣文件夾上傳並存儲在數據庫

圖片鏈接

希望這有助於

+0

'picture_set1.delete()'deliting僅數據庫行,而不是圖像。我沒有指定任何額外的delete()函數,所以我認爲我需要指定它。 – krzyhub

+0

我在上一個項目中做了什麼,我實現了一天運行一次的清理功能,並刪除了不再需要的任何數據,這就是爲什麼我這樣做的 – cwoebker

+0

像deamon過程? – krzyhub

相關問題