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 |
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) |
How do you access it when there’s no “FormView” but you’re using the Django Admin?
I haven’t found a way to access it in the Django Admin.