MarkO
MarkO

Reputation: 795

ModelMultipleChoiceField passing request.user

I want to use forms.ModelMultipleChoiceField in a form. I know it takes a queryset, however the query set I will be using take the param user which I normally pass in a view using request.user. However this is in a form, how do I pass request.user? do I need to?

Entry.objects.filter(request.user)

Upvotes: 1

Views: 334

Answers (1)

Samuele Mattiuzzo
Samuele Mattiuzzo

Reputation: 11048

You should override your form's init method:

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
                                   )

and in your views, when it's time to instantiate the form:

form = MyForm(request.user)

or

form = MyForm()

Upvotes: 3

Related Questions