2017-07-19 37 views
0

我一直在閱讀django文檔,並試圖創建一組選項。根據用戶選擇的選項,文件將保存在不同的文件夾中。雖然我似乎無法找到一種方法來運作。根據選擇上傳到不同的文件夾 - Django

我目前得到這個作爲我的模型:

from django.db import models 

class Document(models.Model): 

    Name = models.CharField(max_length=25, blank=True) 

    Week_1 = 'Week1' 
    Week_2 = 'Week2' 
    Week_3 = 'Week3' 
    Week_4 = 'Week4' 

    Weekly_Choices = (
     (Week_1, 'Week_1'), 
     (Week_2, 'Week_2'), 
     (Week_2, 'Week_3'), 
     (Week_2, 'Week_4') 
    ) 

    Week = models.CharField(max_length=10, choices=Weekly_Choices, default=Week_1, blank=False) 
    docfile = models.FileField() 

    if Week.choices == Week_1: 
     docfile.upload_to = 'documents/'+ Week_1 + '/' + 'Mentee' 

雖然,我不知道爲什麼這不起作用 - 對不起,我還是有點新的Django和Python。

我仔細研究過它,我知道有一個Model.get_FOO_display()函數,但這不是我要找的。此外,我還查看了django選項,但'get_choice'函數輸出字典類型。我希望可能有一個更簡單的方法,我錯過了?

任何幫助將是有益的 - 感謝:d

回答

0

它不會工作,除非你給upload_to場在你的模場DOCFILE

試試這個

docfile = models.FileField(upload_to=location) 

def location(instance, filename): 
    if instance.Week == Week_1: 
     return 'documents/'+ Week_1 + '/' + 'Mentee' + filename 

希望這可以幫助你out

2

您可以嘗試:

def choices_location(instance, filename): 
    if instance.week == 'Week_1': 
     return os.path.join('documents', 'Week_1','Mentee', filename) 
    elif instance.week == Week_2: 
     return os.path.join('documents', 'Week_2','Mentee', filename) 

docfile = models.FileField(upload_to=choices_location) 

這將爲你工作!

+0

這很有道理,但我唯一的問題是,它說「NameError:name'Week'沒有被定義。」我在定義Week之後放置了函數,但不知道爲什麼它的名稱錯誤 – tetris12367

+0

感謝那些作品:) – tetris12367

相關問題