в принципе все, что нужно - унаследоваться от AbstractBaseUser и сделать все то же, что и для юзера с юзернейм, но нужно указать в модели USERNAME_FIELD
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.core import validators
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
class CustomUserManager(BaseUserManager):
def _create_user(self, email, password, is_staff, is_superuser, is_active=False, **extra_fields):
now = timezone.now()
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email, is_staff=is_staff, is_active=is_active,
is_superuser=is_superuser, last_login=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **extra_fields):
return self._create_user(email, password, False, False, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
return self._create_user(email, password, True, True, is_active=True)
class User(AbstractBaseUser, PermissionsMixin):
first_name = models.CharField(
verbose_name='имя', max_length=30, blank=True)
last_name = models.CharField(
verbose_name='фамилия', max_length=30, blank=True)
email = models.EmailField(verbose_name='email', unique=True)
is_staff = models.BooleanField(verbose_name='флаг персонала', default=False,
help_text='Определяет разрешение пользователя на вход в административную часть.')
is_active = models.BooleanField(verbose_name='активен', default=False,
help_text='Определяет активен ли пользователь в системе. Снимите флаг, '
'вместо удаления пользователя.')
date_joined = models.DateTimeField(
verbose_name='дата регистрации', auto_now_add=True)
USERNAME_FIELD = 'email'
objects = CustomUserManager()
дальше все можно сделать по рецепту - http://djbook.ru/examples/47/
В принципе я так уже сделал, но совсем лениво писать механизм регистрации, смены пароля и т.д К сожалению, django-registration и django-registration-email не правильно работают с таким пользователем...