2015-02-05 64 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'错误消息的多个值。