Reputation: 2439
I want to access the request object in the init method of Django allauth
the custom form code I have
from allauth.account.forms import SignupForm
class CustomSignupForm(SignupForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if 'email' in self.request.session:
self.fields['email'].value = self.request.session['email']
self.fields['email'].disabled = True
def signup(self, request, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
return user
The custom view that i use the form is
from allauth.account.views import SignupView
class CustomFormSignupView(SignupView):
form_class = CustomSignupForm
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['request'] = self.request
return kwargs
Upvotes: 2
Views: 378
Reputation: 51938
Actually you don't need to override account's view to put email in the view. From this implementation
, I can see that if you set the email in session against key account_verified_email
, then it should appear in the form.
Still, if you override the accounts.SignupView
, then do the following steps:
First, you need to put CustomFormSignupView
in the url:
urlpatterns =+ [
url(r'^accounts/', include('allauth.urls')),
url(r'^accounts/signup/$', CustomFormSignupView.as_view(), name="account_signup")
]
And update the form:
from allauth.account.forms import SignupForm
class CustomSignupForm(SignupForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super().__init__(*args, **kwargs)
if 'email' in self.request.session:
self.fields['email'].value = self.request.session['email']
self.fields['email'].disabled = True
def signup(self, request, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
return user
Upvotes: 3