pulseapi/users/models.py (70 lines of code) (raw):
from django.db import models
from django.contrib.auth.models import (
BaseUserManager,
AbstractBaseUser,
PermissionsMixin
)
from pulseapi.profiles.models import UserProfile
class EmailUserManager(BaseUserManager):
def create_user(self, name, email, password=None):
if not name:
raise ValueError('Users must have a name')
if not email:
raise ValueError('Users must have an email address')
if not password:
password = self.make_random_password()
# Ensure that new users get a user profile associated
# with them, even though it'll be empty by default.
# Is_active is set to False, so we can hide this
# user's profile and entries, until set to active by a moderator.
profile = UserProfile.objects.create(is_active=False)
user = self.model(
email=email,
name=name,
profile=profile,
)
user.set_password(password)
user.save()
return user
def create_superuser(self, name, email, password):
user = self.create_user(
name=name,
email=email,
password=password,
)
user.is_staff = True
user.is_superuser = True
user.save()
return user
class EmailUser(AbstractBaseUser, PermissionsMixin):
# We treat the user's email address as their username
email = models.CharField(
verbose_name='email (acts as username)',
max_length=254,
unique=True,
)
# And we have an additional field for the user's full name,
# as Django's User model is not useful for world users.
name = models.CharField(max_length=1000)
# Is this user a valid Django administrator?
is_staff = models.BooleanField(
default=False,
verbose_name="this user counts as django::staff",
)
is_active = models.BooleanField(
default=True,
help_text="is this user active (i.e. can they log in)",
)
# A user can have only zero or one profile. For social auth, the profile is
# automatically created for the user.
profile = models.OneToOneField(
'profiles.UserProfile',
on_delete=models.CASCADE,
related_name='related_user',
null=True
)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']
objects = EmailUserManager()
def get_full_name(self):
return self.name + " (" + self.email + ")"
def get_short_name(self):
return self.email
def clean(self):
pass
def toString(self):
return self.email
def __unicode__(self):
return self.toString()
def __str__(self):
return self.toString()