在django中保存一个新文件名

时间:2015-09-21 20:00:11

标签: python django rename

我有一个模型可以上传图片,文件名将是字段的名称:

class SomeModel(models.Model):
    name = models.CharField(max_length=100)
    image_file = models.FileField(upload_to='renaming')

重命名作品。图像获得标题的名称。但现在,如果用户更新标题,图像文件名保持不变,我想改变它:

def save(self, *args, **kwargs):
        super(Company, self).save(*args, **kwargs)
        try:
        this = Company.objects.get(id=self.id)
        if this.image_file:
            blocks = this.image_file.name.split('.')
            if not blocks[0] == this.name:
                new_name = "%s.%s" % (this.name, blocks[-1])
                this.image_file.name = new_name
        except ObjectDoesNotExist:
            pass

每次保存someModel时,都会查看图片是否存在。如果存在,则比较两个字符串nameimage_file。如果它们不相同new_name包含新名称。但是,现在,我不确定如何保存。 new_name.save()因为它只是一个字符串而无法工作。如果我做self.save()它将创建一个无限循环。我还尝试再次复制和粘贴此super(Company, self).save(*args, **kwargs)。但它并没有覆盖文件名。 有没有办法在不使用信号或其他功能的情况下轻松完成此操作?

2 个答案:

答案 0 :(得分:0)

使用self代替你拥有的(如上所述),对其进行检查,然后调用super(Company,self).save(* args,** kwargs)。

你当前的方式不起作用,因为调用super(公司,自己).save(* args,** kwargs)并不重要,因为它是已被更​​改的“this”对象。

答案 1 :(得分:0)

问题是当你更改名称时,它只在数据库中更改而不在光盘上更改。所以我找到了DbxWebAuthNoRedirect webAuth = new DbxWebAuthNoRedirect(config, appInfo); 的解决方案:

http://my-website.com/dropbox?authorization_code={authorization_code}