2014-01-24 76 views
0

圖像刪除後,我需要從文件系統中刪除它。 我用這個信號。 它運作良好,直到我發現一些奇怪的行爲。 如果在django管理員中選擇另一個文件(所以,我更改圖像文件),同時選擇刪除圖像,然後圖像不會從文件系統中刪除/它看起來像Django試圖刪除POST數據中的文件。Django管理員刪除圖像(錯誤或錯誤)

有什麼辦法可以刪除舊文件嗎?

回答

0

如果我理解你的問題正確,你需要刪除舊的圖像,當你更換Django管理的圖像。

對於這樣的刪除信號不會幫助,因爲模型實例是永遠不會被刪除,但只有一個屬性被改變。爲此,您需要一種方法來確定保存時模型實例是否髒(任何字段已更改)。

您可以使用django-dirtyfields做到這一點。

class FooModel(DirtyFieldsMixin, models.Model): 
    image = models.ImageField(upload_to='...') 
    ... 

def changeremove(sender, instance, *args, **kwargs): 
    if instance.is_dirty(): 
     name = 'image' 
     new = getattr(instance, name) 
     old = instance.get_dirty_fields().get(name, None) 
     if old: 
      old.delete(save=False) 
      setattr(instance, name, new) 

post_save.connect(changeremove, sender=FooModel) 
+0

號,如果圖像是唯一改變它工作正常。但是,如果我正在更改文件並同時勾選刪除複選框,則圖像不會被刪除。 –

+0

你是否將它用作內聯管理員? – miki725

+0

是的。它是內聯的 –