How to access the HttpRequest object in Django forms
Passing the request object to the form
In your view, when you create a form instance, pass the request object as a parameter. Here I used a parameter named request.
form = MyForm(request.POST, request.FILES, request=request)
Accessing the request object in the form
In your form, use the __init__ method to assign the request object to a variable. Here I used self.request.
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(MyForm, self).__init__(*args, **kwargs)
Form validation
Now we can use the self.request variable to access the request object inside of our form methods.
In the following example, I used the self.request variable to check if the name of the currently logged user is different from the value of the ‘name’ field.
class MyForm(forms.ModelForm):
# Use self.request in your field validation
def clean_name(self):
if self.cleaned_data['name'] != self.request.user.name:
raise forms.ValidationError("The name is not the same.")
return self.cleaned_data['name']