我需要面具生成上傳的圖片的名稱如何在上傳的文件/圖像的名稱中使用主鍵ID?
images/{{ uploaded_image.id }}.jpg
我認爲要做到這一點的最好辦法是FileField.upload_to財產,但它寫入Here:
在大多數情況下, ,該對象還沒有被保存到數據庫中,所以如果它使用默認的AutoField,它可能還沒有它的主鍵字段的值。
可能在我的情況下最好重命名文件保存對象save()方法?
我需要面具生成上傳的圖片的名稱如何在上傳的文件/圖像的名稱中使用主鍵ID?
images/{{ uploaded_image.id }}.jpg
我認爲要做到這一點的最好辦法是FileField.upload_to財產,但它寫入Here:
在大多數情況下, ,該對象還沒有被保存到數據庫中,所以如果它使用默認的AutoField,它可能還沒有它的主鍵字段的值。
可能在我的情況下最好重命名文件保存對象save()方法?
感謝,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文件,所以在其他情況下,它可以替代原來的擴展名
爲了避免併發性問題,您需要在確定文件名之前將對象存儲到數據庫中(因爲即使您獲得了下一個增量ID,這可能會在您保存文件時發生變化)。存儲該對象,然後重命名該文件。
我要做的就是給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)
也許「uuid.uuid4().hex」? – Glader 2009-06-22 00:22:12
@Glader - 謝謝,把它清理了一下 – 2009-06-22 00:41:06