2012-04-17 90 views
2

我需要Django的管理员能够上传应当保存图像为[self.id] .jpg文件在Django管理

所以保存为/path/{self.id}.jpg图像到目前为止,我有ID,状态,标题字段的数据库,并与ID,状态,标题,拇指领域的典范:

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()方法来首次调用超()。保存(),然后处理图像上载(这在ImageFieldFile对象),并改名为self.id

建议?

谢谢

+0

可能重复http://stackoverflow.com/questions/9968532/django-admin-file-上传与当前模型ID) – Ajoy 2015-05-29 04:58:14

+0

这是最好的[解决方案](http://stackoverflow.com/a/15776267/1761793)这个问题。 – Ajoy 2015-05-29 04:59:49

回答

-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))]) 
[当前型号ID Django管理文件上传(的
+1

'self.id'是'None',因为模型尚未保存 – Ajoy 2015-05-27 14:00:11