Django ModelForm, FormView and the Request Object

It’s often necessary to get access to the request object from within a ModelForm. To do this, you’ll need to override a single method in both the ModelForm and FormView.

First the FormView:

class RegisterView(FormView):
template_name = 'register.html'
form_class = RegisterForm
success_url = reverse_lazy('home')
# add the request to the kwargs
def get_form_kwargs(self):
kwargs = super(RegisterView, self).get_form_kwargs()
kwargs['request'] = self.request
return kwargs

view raw

hosted with ❤ by GitHub

And now the ModelForm:

class RegisterForm(forms.ModelForm):
username = forms.CharField(max_length=User._meta.get_field('username').max_length)
email = forms.CharField(max_length=User._meta.get_field('email').max_length, widget=HTML5EmailInput())
password = forms.CharField(min_length=6, max_length=16, widget=forms.PasswordInput())
# the request is now available, add it to the instance data
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super(RegisterForm, self).__init__(*args, **kwargs)

view raw

hosted with ❤ by GitHub

2 thoughts on “Django ModelForm, FormView and the Request Object”

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s