在DJANGO admin上将图像保存为[self.id] .jpg

时间:2012-04-17 15:31:53

标签: django django-models django-admin

我需要django上的管理员才能上传应保存为/ path / {self.id} .jpg的图片

到目前为止,我有一个包含id,status,title字段和id,status,title,THUMB字段的模型的数据库:

class MEL(models.Model):
    id = models.AutoField(primary_key=True, editable=False)
    status = models.IntegerField(choices=( (0, 'inactive'), (1, 'active') ), default=1)
    title = models.TextField(verbose_name='Título')
    thumb = models.ImageField(upload_to=upload_path)

    class Meta:
        db_table = u'MEL'

问题是图像先前已保存到正在保存的模型中,因此此时我无法将其保存为“self.id”。 我想我可以把它保存到/ tmp / {uuid}然后重命名后保存,可能是这样的:

def upload_path(self, filename):
    self.file_uuid = uuid.uuid4()
    return '/tmp/' + self.file_uuid

然后进行保存后重命名并从/ tmp /

中删除它

或者我可以尝试重写此模型的save()方法,先调用super()。save(),然后处理图像上传(在ImageFieldFile对象中)并将其重命名为self.id

建议?

感谢

1 个答案:

答案 0 :(得分:-1)

您应该可以使用upload_to更改文件名。我这样说是因为我在项目中完成了这个,而django文档说的是: https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField.upload_to

该链接的第三段说明:“这也可能是一个可调用的,例如一个函数,它将被调用以获取上传路径,包括文件名。” [强调补充]。我不是想要讽刺我只是表明这是,而且应该是可能的,所以其他东西必须继续。

尝试这样的事情。问题可能是您要离开扩展程序:

def upload_path(self, filename):
    basename, extension = os.path.splitext(filename)
    return '/'.join(["path",("%s%s" % (self.id, extension))])