首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在更新ImageField时删除旧镜像?

如何在更新ImageField时删除旧镜像?
EN

Stack Overflow用户
提问于 2010-05-21 07:03:39
回答 8查看 31.1K关注 0票数 41

我正在使用Django创建一个库存照片网站,我的模型中有一个ImageField,问题是当用户更新图像字段时,原始图像文件不会从硬盘中删除。

更新后如何删除旧镜像?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-05-21 12:25:10

您必须手动删除旧图像。

图像的绝对路径存储在your_image_field.path中。所以你会做类似这样的事情:

代码语言:javascript
复制
os.remove(your_image_field.path)

但是,为了方便起见,您可以使用关联的FieldFile对象,它可以方便地访问底层文件,并提供一些方便的方法。请参阅http://docs.djangoproject.com/en/dev/ref/models/fields/#filefield-and-fieldfile

票数 21
EN

Stack Overflow用户

发布于 2012-08-21 23:53:23

使用django-cleanup

代码语言:javascript
复制
pip install django-cleanup

settings.py

代码语言:javascript
复制
INSTALLED_APPS = (
    ...
    'django_cleanup.apps.CleanupConfig', # should be placed after your apps

)
票数 61
EN

Stack Overflow用户

发布于 2010-06-11 11:38:44

在模型中使用此自定义保存方法:

代码语言:javascript
复制
def save(self, *args, **kwargs):
    try:
        this = MyModelName.objects.get(id=self.id)
        if this.MyImageFieldName != self.MyImageFieldName:
            this.MyImageFieldName.delete()
    except: pass
    super(MyModelName, self).save(*args, **kwargs)

它在我的网站上对我很有效。这个问题也困扰着我,我不想在一开始就写一个清理脚本,而不是好的记账。如果有任何问题,请告诉我。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2878490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档