2016-01-07 42 views
0

以前我讓用戶從顏色的下拉列表中選擇,但我想爲他們選擇一個,所以我使用下面的代碼來確定哪些顏色是有效的選擇然後隨機選擇一個。我試圖讓它在表單中預先填充,並且出現名稱錯誤。抓住我的頭像瘋了一樣,因爲我已經通過簡單地將choice管入模板中來測試此代碼。所以我知道在這種情況下代碼正常運行。我不能做我以下做的事嗎?預填充1個表單字段,這是一個外鍵

當我啓動我的服務器是Name Error: name 'cur_colors' [at the list comprehension line] is not defined,但它顯然是我得到的錯誤...

class LimitedJobForm(forms.ModelForm): 
    jobnum = forms.CharField(label='Job Number') 
    #get colorchoice 
    cur_jobs = Job.objects.filter(enddate__gte=(datetime.date.today()-timedelta(days=7))) 
    all_colors = Color.objects.all() 
    cur_colors = [] 
    for i in cur_jobs: 
     cur_colors.append(i.color) 
    aval_colors = [x for x in all_colors if x not in cur_colors] 
    choice = random.choice(aval_colors) 
    color = forms.CharField(initial=choice) 
+0

[在\ _ \ _初始化\ _ \ _方法設置初始Django的表單字段值]的可能的複製(http://stackoverflow.com/questions/22390416/setting-initial-django-form-field -init-method) – binki

回答

1

你還沒有爲這個代碼中定義的init方法進入,正是如此它只是讀書每行分別作爲聲明

將代碼移到init方法中,它應該可以正常工作!

class LimitedJobForm(forms.ModelForm): 

    jobnum = forms.CharField(label='Job Number') 
    color = forms.CharField() 

    def __init__(self, *args, **kwargs): 
     super(LimitedJobForm, self).__init__(*args, **kwargs) 
     cur_jobs = Job.objects.filter(enddate__gte=(datetime.date.today()-timedelta(days=7))) 
     all_colors = Color.objects.all() 
     cur_colors = [] 
     for i in cur_jobs: 
      cur_colors.append(i.color) 
     aval_colors = [x for x in all_colors if x not in cur_colors] 
     choice = random.choice(aval_colors) 
     self.fields['color'].initial = choice 
+0

很遺憾,我不明白如何應用這個幫助。這會在課堂內部還是課外?你沒有提到我設置cur_jobs和all_colors的時間。我可以像我一樣把它留在課堂上嗎? –

+0

仍然出現錯誤:'color = forms.CharField(ini​​tial = choice) NameError:name'choice'is not defined' –

+0

我得到一個也許有點不相關的錯誤:'__init __()得到一個意外的關鍵字參數'前綴''這是指向我的視圖,它有'form = LimitedJobForm(request.POST或None,prefix ='add')' 我需要前綴來區分另一個類似的表單 –

相關問題