【问题标题】:replacing a file while uploading in django在 django 中上传时替换文件
【发布时间】:2015-07-28 02:12:23
【问题描述】:

我的 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

【问题讨论】:

    标签: python django models image-uploading


    【解决方案1】:

    您可能想要覆盖 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)
    

    【讨论】:

    • 为什么 save=Falsedelete() 中?难道他不想在保存新的之前从 db 中抑制吗?
    • 谢谢!这一直有效,直到 .delete () 然后它抛出一个最大递归错误
    猜你喜欢
    • 2012-10-26
    • 2021-05-18
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2017-02-20
    • 2021-05-17
    相关资源
    最近更新 更多