将值传递到django表单中

M_J*_*M_J 1 python forms django

我一直在搜索并弄清楚它是如何工作的,但我仍然没有把握住这一点.我想要做的是将值传递到表单然后用于查询.我有一个名为menu_term的会话变量,它确定表单中的选项.

来自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))   
Run Code Online (Sandbox Code Playgroud)

来自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'];
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

 __init__() got multiple values for keyword argument 'current_term'
Run Code Online (Sandbox Code Playgroud)

为了让其他人遇到这种情况,有哪些正确的方法可以定义一个从外部传入值的表单?

谢谢,美好的一天MJ

dm0*_*514 5

在调用表单超级之前,弹出kwarg以实例化表单非常重要 __init__

class CourseGroupForm(ModelForm):
 def __init__(self, current_term, *args, **kwargs):
    current_term = kwargs.pop('current_term')
    super(CourseGroupForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

以上假设current_term始终存在.

正如@vishen指出的那样,检查你的参数,你正在使用requestas的值初始化你的表单current_term