当在 Django 中修改 ImageFiled 条目时,从媒体文件夹中删除上一个图像

Ran*_*u R 1 python django django-models

我有一个带有 ImageField 的模型。

class Photo(models.Model):
  ----
  image = models.ImageField(verbose_name=_('Image'),upload_to='images/category/%Y/%m/%d/',
            max_length=200,null=True,blank=True)
  ---
Run Code Online (Sandbox Code Playgroud)

我编辑了这个模型并通过上传新图像更改了图像字段。

我的问题是,当我用新图像更新此条目时,有没有办法从其目录(媒体文件夹)中删除上一个图像。我正在使用 django 1.4.3 。

Tim*_*ony 5

您可以使用django 的信号或简单地覆盖save模型上的方法。我会写一个信号。类似于以下内容(请注意,这是未经测试的):

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

class Photo(models.Model):
     image = ...

@receiver(pre_save, sender=Photo)
def delete_old_image(sender, instance, *args, **kwargs):
    if instance.pk:
        existing_image = Photo.objects.get(pk=instance.pk)
        if instance.image and existing_image.image != instance.image:
            existing_image.image.delete(False)
Run Code Online (Sandbox Code Playgroud)