我正在用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在更新后自动删除这些文件?
我真的很感谢你的帮助
答案 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__
方法可以访问以前的文件名以删除它。