Skip to content
Custom user model for Django >= 1.5 with the same behaviour as Django's default User but with email instead of username.
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src/custom_user Renamed custom_user directory to src/custom_user Jan 13, 2017
test_custom_user_subclass Added migrations for Django 1.7 and 1.8 Nov 6, 2015
test_settings Django's master version requires the auth context processor when admi… Jan 12, 2017
.bumpversion.cfg Added bumpversion Jan 12, 2017
.gitignore Renamed custom_user directory to src/custom_user Jan 13, 2017
.travis.yml Renamed custom_user directory to src/custom_user Jan 13, 2017
LICENSE.rst Renamed repo Sep 11, 2014
MANIFEST.in Package setup Apr 9, 2013
README.rst Version 0.7 Jan 12, 2017
django-custom-user.sublime-project Updated Sublime Text project file. Mar 6, 2015
pylama.ini Renamed custom_user directory to src/custom_user Jan 13, 2017
requirements-test-mysql.txt Moved hardcoded requirements outside of tox.ini Jan 13, 2017
requirements-test-postgres.txt Moved hardcoded requirements outside of tox.ini Jan 13, 2017
requirements-test.in Upgraded requirements Jan 12, 2017
requirements-test.txt
requirements.in
requirements.txt Added bumpversion Jan 12, 2017
setup.cfg Renamed custom_user directory to src/custom_user Jan 13, 2017
setup.py Renamed custom_user directory to src/custom_user Jan 13, 2017
tox.ini Moved hardcoded requirements outside of tox.ini Jan 13, 2017

README.rst

Django Custom User

Custom user model for Django >= 1.5 with the same behaviour as Django's default User but without a username field. Uses email as the USERNAME_FIELD for authentication.

Quick start

  1. Install django-custom-user with your favorite Python package manager:
pip install django-custom-user
  1. Add 'custom_user' to your INSTALLED_APPS setting:
INSTALLED_APPS = (
    # other apps
    'custom_user',
)
  1. Set your AUTH_USER_MODEL setting to use EmailUser:
AUTH_USER_MODEL = 'custom_user.EmailUser'
  1. Create the database tables:
python manage.py migrate

Or if you are using an old Django version (<=1.6):

python manage.py syncdb

Usage

Instead of referring to EmailUser directly, you should reference the user model using get_user_model() as explained in the Django documentation. For example:

from django.contrib.auth import get_user_model

user = get_user_model().objects.get(email="user@example.com")

When you define a foreign key or many-to-many relations to the EmailUser model, you should specify the custom model using the AUTH_USER_MODEL setting. For example:

from django.conf import settings
from django.db import models

class Article(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL)

Extending EmailUser model

You can easily extend EmailUser by inheriting from AbstractEmailUser. For example:

from custom_user.models import AbstractEmailUser

class MyCustomEmailUser(AbstractEmailUser):
    """
    Example of an EmailUser with a new field date_of_birth
    """
    date_of_birth = models.DateField()

Remember to change the AUTH_USER_MODEL setting to your new class:

AUTH_USER_MODEL = 'my_app.MyCustomEmailUser'

If you use the AdminSite, add the following code to your my_app/admin.py file:

from django.contrib import admin
from custom_user.admin import EmailUserAdmin
from .models import MyCustomEmailUser


class MyCustomEmailUserAdmin(EmailUserAdmin):
    """
    You can customize the interface of your model here.
    """
    pass

# Register your models here.
admin.site.register(MyCustomEmailUser, MyCustomEmailUserAdmin)

Changelog

Version 0.7 (2017-01-12)

  • Fixed change password link in EmailUserChangeForm (thanks to Igor Gai and rubengrill)

Version 0.6 (2016-04-03)

  • Added migrations (thanks to everybody for the help).

How to apply the migrations after upgrading:

Django 1.7

For this version just run the following commands.

python manage.py migrate custom_user 0001_initial_django17 --fake
python manage.py migrate custom_user

Django 1.8

This version didn't work without migrations, which means that your migrations will conflict with the new ones included in this version.

If you added the migrations with Django's MIGRATION_MODULES setting, delete the folder containing the migration modules and remove the setting from your config.

If you just ran python manage.py makemigrations, the migrations are located inside your system's or virtualenv's site-packages folder. You can check the location running this command, and then delete the folder migrations that is inside:

python -c "import os; import custom_user; print(os.path.dirname(custom_user.__file__))"

You can check if you have removed the migrations successfully running this command, you shouldn't see the section custom_user anymore:

python manage.py migrate --list

Once the old migrations are gone, run the following command to finish:

python manage.py migrate custom_user 0002_initial_django18 --fake

Version 0.5 (2014-09-20)

  • Django 1.7 compatible (thanks to j0hnsmith).
  • Custom application verbose_name in AdminSite with AppConfig.

Version 0.4 (2014-03-06)

  • The create_user() and create_superuser() manager methods now accept is_active and is_staff as parameters (thanks to Edil Kratskih).

Version 0.3 (2014-01-17)

  • AdminSite now works when subclassing AbstractEmailUser (thanks to Ivan Virabyan).
  • Updated model changes from Django 1.6.1.

Version 0.2 (2013-11-24)

  • Django 1.6 compatible (thanks to Simon Luijk).

Version 0.1 (2013-04-09)

  • Initial release.
You can’t perform that action at this time.