2009-06-21 27 views
2

我需要面具生成上傳的圖片的名稱如何在上傳的文件/圖像的名稱中使用主鍵ID?

images/{{ uploaded_image.id }}.jpg 

我認爲要做到這一點的最好辦法是FileField.upload_to財產,但它寫入Here

在大多數情況下, ,該對象還沒有被保存到數據庫中,所以如果它使用默認的AutoField,它可能還沒有它的主鍵字段的值。

可能在我的情況下最好重命名文件保存對象save()方法?

回答

0

感謝,Blixt和託德!我選擇我的問題更好的解決方案:

import time 
class Image(models.Model): 
    def _get_upload_to(instance, filename): 
     return 'images/%f.jpg' % time.time() 

    original = models.ImageField(upload_to=_get_upload_to, ....) 

這是保證每一個文件名會在同一個目錄中是唯一的。在我的情況下,我只需要JPG文件,所以在其他情況下,它可以替代原來的擴展名

2

爲了避免併發性問題,您需要在確定文件名之前將對象存儲到數據庫中(因爲即使您獲得了下一個增量ID,這可能會在您保存文件時發生變化)。存儲該對象,然後重命名該文件。

6

我要做的就是給upload_to一個函數,然後分配一個UUID是,它保存到功能:

import uuid 

def get_upload_to(instance, filename): 
    instance.uuid = uuid.uuid4().hex 
    return 'blah/%s/%s' % (instance.uuid, filename) 

class Photo(models.Model): 
    file = models.FileField(max_length=200,upload_to=get_upload_to) 
    uuid = models.CharField(max_length=32) 
+0

也許「uuid.uuid4().hex」? – Glader 2009-06-22 00:22:12

+0

@Glader - 謝謝,把它清理了一下 – 2009-06-22 00:41:06

相關問題