6

我正在用 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 在更新后自动删除这些文件?

我将衷心感谢您的帮助

4

2 回答 2

2

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

最后我制作了应用程序,它解决了这个问题 - django-cleanup

于 2012-08-17T12:27:03.297 回答
1

我确信 Django 是有意为之的。例如,它无法知道是否有任何其他模型可能正在使用该文件。如果您希望文件保留并发现 django 删除了它,您也会感到非常惊讶!

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

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

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

于 2010-01-07T22:15:43.370 回答