The answer by Ber – storing it in threadlocals – is a very bad idea. There’s absolutely no reason to do it this way.
A much better way is to override the form’s __init__
method to take an extra keyword argument, request
. This stores the request in the form, where it’s required, and from where you can access it in your clean method.
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(MyForm, self).__init__(*args, **kwargs)
def clean(self):
... access the request object via self.request ...
and in your view:
myform = MyForm(request.POST, request=request)