【问题标题】:saving an image as [self.id].jpg on DJANGO admin在 DJANGO 管理员上将图像保存为 [self.id].jpg
【发布时间】:2012-04-28 23:16:46
【问题描述】:

我需要一个 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

建议?

谢谢

【问题讨论】:

标签: django django-models django-admin


【解决方案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))])

【讨论】:

  • self.idNone,因为模型尚未保存
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多