How to customize user profile when using django-allauth How to customize user profile when using django-allauth django django

How to customize user profile when using django-allauth


Suppose you want to ask the user for his first/last name during signup. You'll need to put these fields in your own form, like so:

class SignupForm(forms.Form):    first_name = forms.CharField(max_length=30, label='Voornaam')    last_name = forms.CharField(max_length=30, label='Achternaam')    def signup(self, request, user):        user.first_name = self.cleaned_data['first_name']        user.last_name = self.cleaned_data['last_name']        user.save()

Then, in your settings point to this form:

ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm'

That's all.


Using the solution suggested by pennersr I was getting a DeprecationWarning:

DeprecationWarning: The custom signup form must offer a def signup(self, request, user) method DeprecationWarning)

This is because as of version 0.15 the save method has been deprecated in favour of a def signup(request, user) method.

So to solve this, the code of the example should be like this:

class SignupForm(forms.Form):    first_name = forms.CharField(max_length=30, label='Voornaam')    last_name = forms.CharField(max_length=30, label='Achternaam')    def signup(self, request, user):        user.first_name = self.cleaned_data['first_name']        user.last_name = self.cleaned_data['last_name']        user.save()


Here's what worked for me combining a few of the other answers (none of them are 100% complete and DRY).

In yourapp/forms.py:

from django.contrib.auth import get_user_modelfrom django import formsclass SignupForm(forms.ModelForm):    class Meta:        model = get_user_model()        fields = ['first_name', 'last_name']    def signup(self, request, user):        user.first_name = self.cleaned_data['first_name']        user.last_name = self.cleaned_data['last_name']        user.save()

And in settings.py:

ACCOUNT_SIGNUP_FORM_CLASS = 'yourapp.forms.SignupForm'

This way it uses the model forms so that it's DRY, and uses the new def signup. I tried putting 'myproject.myapp.forms.SignupForm' but that resulted in a error somehow.