2012-04-17 62 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