How to use email as username for Django registration

1.1k Views Asked by At

I am new to django and creating registration form using django's UserRegistrationForm, which requires username and password . I want to use email instead of username. How I can do this?

def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request,f'Account Created For {username} !')
            return redirect('starting-page')
    else:   
        form = UserRegisterForm()
    return render(request,'users/register.html',{'form': form})

 
1

There are 1 best solutions below

2
danieltellez On

First step to use email as username is to customize User model by extending AbstractBaseUser, something like this:

from django.contrib.auth.models import AbstractUser, PermissionsMixin
from django.utils.translation import gettext_lazy as _ 

... 

class CustomUser(AbstractBaseUser, PermissionsMixin):
    first_name = models.CharField(_('first name'), max_length=150, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)
    email = models.EmailField(_('email address'), unique=True)

    ...
    
    USERNAME_FIELD = 'email'

  

Then, in your settings.py, you have to set your custom model user:

AUTH_USER_MODEL = 'your_app.CustomUser'

You can take a look at the Django Registrations docs to see any particular information on some of the required fields or methods depending on your workflow.