[Fixed]-Passing a user, request to forms

45👍

Just pass it into the constructor and store it as an instance variable:

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("request")
        super(MyForm, self).__init__(*args, **kwargs)

    def clean(self):
        print self.request.user
        ...

In your view:

form = MyForm(..., request=request)

And if using a class-based view (a CreateView in this example):

class MyCreateView(CreateView):

    ... 

    def get_form_kwargs(self):
        kwargs = super(MyCreateView, self).get_form_kwargs()
        kwargs.update({'request': self.request})
        return kwargs

Leave a comment