Django - 更新模型不会删除旧的FileField

时间:2010-01-07 22:01:21

标签: django admin backend 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在更新后自动删除这些文件?

我真的很感谢你的帮助

2 个答案:

答案 0 :(得分:2)

我对这个问题考虑得很多,最终我找到了一个解决方案,但对我来说效果不错。您可以在项目中找到所有模型,并将pre_save和post_delete信号连接到它们。

最后我制作了app,解决了这个问题 - django-cleanup

答案 1 :(得分:1)

我确信Django是按照设计做到的。例如,它无法知道是否有任何其他模型正在使用该文件。如果您希望文件保留并发现django已将其删除,您也会感到非常惊讶!

但是,还有一个问题是,只要更改文件字段,就会丢失旧文件名。

有一个关于这个问题的公开票:http://code.djangoproject.com/ticket/11663

http://code.djangoproject.com/ticket/2983中有一个补丁,显示如何覆盖__set__以存储以前的文件名。然后,模型的__save__方法可以访问以前的文件名以删除它。