2017-04-16 67 views
0

我使用init方法在表單中創建ChoiceField以調用另一個填充字段選擇的函數。現在,當用戶選擇下拉列表並提交表單時,我無法用請求成功創建表單,並且我認爲「bound = False」使表單無效。有沒有辦法使用init方法來創建表單域,同時使表單域在請求中傳遞有效。POST?提前致謝。當使用__init__創建字段時,Django形式不受限制

Forms.py

class CoursesForm(forms.Form): 

    def __init__(self, subject, *args, **kwargs): 
     super(CoursesForm, self).__init__(*args, **kwargs) 
     self.fields['course'] = forms.ChoiceField(choices=get_uw_courses_from_subject(subject), required=False) 

View.py:處理該提交形式

def display_selection(request): 
    if request.method == 'POST': 
     course_form = CoursesForm(request.POST) # <CourseForm bound=False...> 

     if course_form.is_valid(): # Not valid here 
      selected_course = course_form.cleaned_data['course'] 
    else: 
     pass 

回答

0

因爲你已經覆蓋的方法簽名,以便第一位置參數是subject方法,而不是data不要那樣做

def __init__(self, *args, **kwargs): 
    subject = kwargs.pop('subject', None) 
    ... 

而且,不要忘了其實主題論點:

course_form = CoursesForm(request.POST, subject=whatever) 
+0

謝謝!它效果很好! –