2013-03-21 63 views
0

我想在表单中使用forms.ModelMultipleChoiceField。我知道它需要一个查询集,但是我将使用的查询集采用param用户,我通常使用request.user在视图中传递该用户。然而,这是一种形式,我如何通过request.user?我需要吗?ModelMultipleChoiceField传递request.user

Entry.objects.filter(request.user) 

回答

2

你应该重写你的窗体的init方法:

class MyForm(forms.ModelForm): 

    class Meta: 
     model = Entry 

    def __init__(self, user=None, *args, **kwargs): 
     super(MyForm, self).__init__(*args,**kwargs) 
     if user is not None: 
      form_choices = Entry.objects.filter(user) 
     else: 
      form_choices = Entry.objects.all() 

     self.fields['my_mfield'] = forms.ModelMultipleChoiceField(
             queryset=form_choices 
            ) 

,并在您的看法,当它的时间,以实例的形式:

form = MyForm(request.user) 

form = MyForm() 
+2

刚一个值得注意的工作:你正在设置错误的变量名在上面的例子中的构造器选择应该是一个查询集。 – 2013-03-22 10:40:37

+1

对不起,我想我想念它... form_choices是一个查询集O_o – 2013-03-22 10:47:31

+0

选择= form_choices将需要被定义为queryset = form_choices或它会抛出和我的理解错误。 – 2013-03-22 11:30:56