我使用的是带有标准ImageField的1.2.5,并使用内置的存储后端。文件上传正常,但是当我从admin中删除一个条目时,服务器上的实际文件不会被删除。
发布于 2013-01-14 09:11:48
您可以接收pre_delete
或post_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)
发布于 2015-03-18 01:21:49
pip install django-cleanup
settings.py
INSTALLED_APPS = (
...
'django_cleanup.apps.CleanupConfig',
)
发布于 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
。
https://stackoverflow.com/questions/5372934
复制相似问题