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