首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当我从数据库/模型中删除一个对象时,如何让Django Admin删除文件?

当我从数据库/模型中删除一个对象时,如何让Django Admin删除文件?
EN

Stack Overflow用户
提问于 2011-03-21 09:19:08
回答 10查看 47.6K关注 0票数 88

我使用的是带有标准ImageField的1.2.5,并使用内置的存储后端。文件上传正常,但是当我从admin中删除一个条目时,服务器上的实际文件不会被删除。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-01-14 09:11:48

您可以接收pre_deletepost_delete信号(参见下面@toto_tico的注释),并在FileField对象上调用delete()方法,因此(在models.py中):

class MyModel(models.Model):
    file = models.FileField()
    ...

# Receive the pre_delete signal and delete the file associated with the model instance.
from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver

@receiver(pre_delete, sender=MyModel)
def mymodel_delete(sender, instance, **kwargs):
    # Pass false so FileField doesn't save the model.
    instance.file.delete(False)
票数 106
EN

Stack Overflow用户

发布于 2015-03-18 01:21:49

试试django-cleanup

pip install django-cleanup

settings.py

INSTALLED_APPS = (
    ...
    'django_cleanup.apps.CleanupConfig',
)
票数 51
EN

Stack Overflow用户

发布于 2013-05-08 22:15:20

Django 1.5解决方案:我使用post_delete的原因多种多样,而这些都是我的应用程序内部的原因。

from django.db.models.signals import post_delete
from django.dispatch import receiver

@receiver(post_delete, sender=Photo)
def photo_post_delete_handler(sender, **kwargs):
    photo = kwargs['instance']
    storage, path = photo.original_image.storage, photo.original_image.path
    storage.delete(path)

我把这个放在models.py文件的底部。

original_image字段是我的Photo模型中的ImageField

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

https://stackoverflow.com/questions/5372934

复制
相关文章

相似问题

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