Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I change the USERNAME_FIELD in Django 1.5 without creating a custom user?

I am trying to use the email field in the default Django user model as the username. I am using Django 1.5 and I saw that the default user has a USERNAME_FIELD property.

In my project, I would like to set the following USERNAME_FIELD = 'email' as a default in the user model.

This small but fundamental tweak is the only thing I would like to change in the user model. I was wondering if there is a way of changing the USERNAME_FIELD without having to subclass the AbstractUser. I saw in this question that you can subclass the AbstractUser and write a custom manager for it.

So I was wondering if there is a simpler way of changing that property?

And if not, what would be the minimal way of extending the AbstractUser to use the email field as username?

like image 726
yellowcap Avatar asked Mar 27 '13 19:03

yellowcap


2 Answers

#Your app's __init__.py

from django.contrib.auth.models import User

User.USERNAME_FIELD = 'email'
like image 135
Thomas Avatar answered Sep 28 '22 10:09

Thomas


You have to write a new Custom User Class by extending the AbstractBaseUser and not AbstractUser

Declare your email as the USERNAME_FIELD there

Optionally you can also declare a custom user manager that extends from BaseUserManager to handle the username required constraint. You can remove username from that manager's create_user function

like image 41
Snigdha Batra Avatar answered Sep 28 '22 09:09

Snigdha Batra