2015-02-05 58 views
1

我已經搜索瞭解並瞭解它是如何工作的,但我仍然沒有把握好這一點。我想要做的是將一個值傳遞給一個表單然後用於查詢。我有一個名爲menu_term的會話變量,它決定了表單中的選項。將值傳遞給Django的形式

從views.py

def manage_groups(request): 
    form = CourseGroupForm(request,current_term=request.session.get('menu_term')) 
return render_to_response("accounts/group_management.html", {'form':form}, context_instance=RequestContext(request)) 

從forms.py

class CourseGroupForm(ModelForm): 
def __init__(self, current_term, *args, **kwargs): 
    super(CourseGroupForm, self).__init__(*args, **kwargs) 
    courseslist = Course.objects.filter(term=current_term, num_in=settings.LAB_COURSES).order_by('description').distinct(); 
    print(courseslist) 
    self.fields['courses'].queryset = forms.ChoiceField(label='Select Course', choices=courseslist) 

class Meta: 
    model = CourseGroup 
    fields = ['name','courses']; 

我得到的錯誤是:

__init__() got multiple values for keyword argument 'current_term' 

對於任何人碰到這個未來的利益,定義從外部傳入價值的表單的正確方法是什麼?

感謝, 好日子 MJ

回答

5

其重要的調用形式超級__init__

class CourseGroupForm(ModelForm): 
def __init__(self, current_term, *args, **kwargs): 
    current_term = kwargs.pop('current_term') 
    super(CourseGroupForm, self).__init__(*args, **kwargs) 

之前彈出你實例化形式kwarg以上假設current_term是始終存在的。

爲@vishen指出,檢查你的論點,你與request初始化這個表單的值current_term

+0

你也可以在kwarg上調用'del':「del kwargs ['current_term']」將其刪除。 – bmhkim

+1

另外,指出這行「self.fields ['courses']。queryset = forms.ChoiceField(label ='Select Course',choices = courseslist)」是錯誤的。他正在分配一個應該給出查詢集的字段 – Alvaro

2

的錯誤是在模型的形式初始化 decleration因爲發生

class CourseGroupForm(ModelForm): 
    def __init__(self, current_term, *args, **kwargs) 

current_term是表單期望找到的第一個參數,但是因爲您先通過了request對象,然後通過current_term,那麼您將高效地通過fo因爲

form = CourseGroupForm(current_term=request,current_term=request.session.get('menu_term')) 

因此,關鍵字參數'current_term'錯誤消息的多個值。