将值传递到django表单中

时间:2015-02-05 00:02:45

标签: python django forms

我一直在搜索并弄清楚它是如何工作的,但我仍然没有把握住这一点。我想要做的是将值传递到表单然后用于查询。我有一个名为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))   
来自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

2 个答案:

答案 0 :(得分:5)

在调用表单super __init__

之前,弹出kwarg很重要的是你实例化你的表单
class CourseGroupForm(ModelForm):
 def __init__(self, current_term, *args, **kwargs):
    current_term = kwargs.pop('current_term')
    super(CourseGroupForm, self).__init__(*args, **kwargs)

以上假设始终存在current_term

正如@vishen指出的那样,检查您的论点,您正在使用request作为current_term

的值来初始化您的表单

答案 1 :(得分:2)

错误正在发生,因为在您的模型表单中 init decleration

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

current_term是表单期望找到的第一个参数,但是因为您先通过request对象,然后再通过current_term,所以您的效果通过以下内容

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

因此关键字参数'current_term'错误消息的多个值。