在django中上传时替换文件

时间:2015-07-28 02:12:23

标签: python django models image-uploading

我的models.py中有以下代码:

def upload_to_cars(instance, filename):
    blocks = filename.split('.')
    ext = blocks[-1]
    filename = "%s.%s" % (instance.name.replace(" ", "-"), ext)
    instance.title = blocks[0]
    return filename

class Cars(models.Model):
    image_file = models.ImageField(upload_to=upload_to_cars, null=True, blank=True)
    name = models.CharField(max_length=200)

当我上传第二张图片时,我希望删除第一张图片。因此每个车类总会只有一个图像。相反,当我上传第二个时,django会在文件名的末尾添加一些字符。

我想到了这个

filename = "%s.%s" %

旧图像会被替换吗?

有什么建议吗?

谢谢!

修改

感谢zxzak我做到了,对我来说它的工作略有不同(使用os.remove(path)):

    try:
        this = Company.objects.get(id=self.id)
        if this.image_file:
            os.remove(this.image_file.path)
    except ObjectDoesNotExist:
        pass

1 个答案:

答案 0 :(得分:2)

您可能希望覆盖save方法以引入此行为。此代码将每次删除以前的image_field,除非正在创建Cars实例。

from django.core.exceptions import ObjectDoesNotExist

class Cars(models.Model):
    image_file = models.ImageField(upload_to=upload_to_cars, null=True, blank=True)
    name = models.CharField(max_length=200)


    def save(self, *args, **kwargs):
        try:
            this = Cars.objects.get(id=self.id)
            if this.image_file:
                this.image_file.delete()   
        except ObjectDoesNotExist: 
            pass        
        super(Cars, self).save(*args, **kwargs)