2013-06-04 49 views
2

我無法讓我的FileField的url設置爲我想要的。upload_to屬性似乎沒有在保存FileField時使用

我的模型是由

class MyModel(models.Model): 

    pdf_file = models.FileField(upload_to="reports", null=True, blank=True) 
    # more stuff 

定義,我創建一個使用實例:

myModel = MyModel() 
myModel.pdf_file = "some_file.pdf" 
myModel.save() 

myModel.pdf_file.url回報<MEDIA_URL>/some_file.pdf,而我希望它是<MEDIA_URL>/reports/some_file.pdf,因爲upload_to屬性。

我錯過了什麼?

編輯

我第一次嘗試設置File對象,而不是一個string,但它複製我的附加一個_<duplication_num>文件,所以我首先創建我的TMP文件夾中的文件,並將其刪除:

myModel.pdf_file = File(open(TMP_FILE_PATH + filename)) 
myModel.save() 

# now that the file is saved to its final location, delete tmp 

filepath = os.path.abspath(TMP_FILE_PATH + filename) 
os.remove(filepath) 

回答

1

upload_to用於上傳,您直接分配字符串名稱。 upload_to僅在創建FileField對象時才採取行動(通過從表單上傳)。

您可以閱讀文檔here

0

upload_to是相對於項目的根目錄,其中文件你上傳的文件是指存儲。但是你沒有給它分配一個文件,而是給它分配一個字符串,這似乎是導致你的FileField認爲你的MEDIA_ROOT中有一個名爲some_file.pdf的文件。

重複:分配文件名(字符串)使得FileField忽略upload_to定義的路徑,並採取給定的字符串作爲真正的路徑。

祝你好運:)

相關問題