2010-01-07 52 views
6

我實現Django的一個應用程序,它有一個FileField字段的模型:Django的 - 更新模式不會刪除舊的FileField

class Slideshow(models.Model): 
    name = models.CharField(max_length=30,unique=True) 
    thumbnail = models.FileField(max_length=1000,upload_to="images/app/slideshows/thumbnails") 

,我有Django在何處管理模式的管理後臺。我剛剛加入的文件admin.py和Django的管理了我的一切

from django.contrib import admin 

from apps.gallery.models import Slideshow 

admin.site.register(Slideshow) 

在後端,可以添加,刪除和更新的幻燈片。但是,當我嘗試更新幻燈片並更改其屬性縮略圖[FileField]時,django不會刪除舊文件。因此,在幾次更新之後,服務器充滿了許多無用的文件。 我的問題是:如何讓django在更新後自動刪除這些文件?

我真的很感謝你的幫助

回答

1

我敢肯定,Django是通過設計來實現這一點的。例如,它不知道是否有其他模型可能正在使用該文件。如果您希望文件保留並發現django將其刪除,您也會感到驚訝!

但是,還有一個問題是,只要更改文件字段,就會丟失舊文件名。

有一個關於這個問題的公開售票:http://code.djangoproject.com/ticket/11663

有一個在http://code.djangoproject.com/ticket/2983一個補丁,它演示如何重寫__set__存儲一個文件名。然後,您的模型的__save__方法可以訪問以前的文件名來刪除它。

+0

是的,你是對的! Django開發人員似乎在新版本中爲這種情況下的新設計工作。 其中一個選項是在FileFields中添加一個附加選項,以使文件在上載時可以替換: http://groups.google.com/group/django-developers/browse_thread/thread/491619541ba6ac75 我支持這個想法, 「謝謝你的幫助塞思「我可能會使用你告訴我的那個補丁。 – raulsan 2010-01-07 23:20:27

+0

剛剛有另一個想法 - 你可以嘗試添加** show_hidden_​​initial **選項到你的'FileField'。據推測,這會讓你在上傳新文件之前訪問'FileField'的原始值。 – Seth 2010-01-10 21:12:14

2

我對這個問題想了很多,最終找到了一個解決方案,對我來說效果不錯。您可以在項目中找到所有模型,並將pre_save和post_delete信號連接到它們。

最後我做了應用程序,解決了這個問題 - django-cleanup

+0

看起來像一個很好的解決方案。我不再在django上工作,不能測試它,但我感謝您的貢獻,un1t! – raulsan 2012-08-29 17:04:57

相關問題