1 | # -*- coding: utf-8 -*-
|
---|
2 | from django.db import models
|
---|
3 | from django.conf import settings
|
---|
4 | from django.contrib.auth.models import (BaseUserManager, AbstractBaseUser,
|
---|
5 | PermissionsMixin)
|
---|
6 |
|
---|
7 |
|
---|
8 | class BaseModel(models.Model):
|
---|
9 | created_at = models.DateTimeField(auto_now_add=True)
|
---|
10 | created_by = models.ForeignKey(
|
---|
11 | settings.AUTH_USER_MODEL, null=True, blank=True, editable=False,
|
---|
12 | related_name='%(app_label)s_%(class)s_created_related'
|
---|
13 | )
|
---|
14 | updated_at = models.DateTimeField(auto_now=True)
|
---|
15 | updated_by = models.ForeignKey(
|
---|
16 | settings.AUTH_USER_MODEL, null=True,
|
---|
17 | blank=True, editable=False,
|
---|
18 | related_name='%(app_label)s_%(class)s_updated_related'
|
---|
19 | )
|
---|
20 |
|
---|
21 | class Meta:
|
---|
22 | abstract = True
|
---|
23 |
|
---|
24 |
|
---|
25 | class AccountManager(BaseUserManager):
|
---|
26 | def _create_user(self, username, email, password, is_staff, is_superuser,
|
---|
27 | **kwargs):
|
---|
28 | if not username:
|
---|
29 | raise ValueError('Accounts must have a username.')
|
---|
30 | if not email:
|
---|
31 | raise ValueError('Accounts must have an e-mail address.')
|
---|
32 |
|
---|
33 | email = self.normalize_email(email)
|
---|
34 | user = self.model(username=username, email=email, is_staff=is_staff,
|
---|
35 | is_superuser=is_superuser, **kwargs)
|
---|
36 |
|
---|
37 | user.set_password(password)
|
---|
38 | user.save(using=self._db)
|
---|
39 |
|
---|
40 | return user
|
---|
41 |
|
---|
42 | def create_user(self, username, email, password=None, **kwargs):
|
---|
43 | return self._create_user(username, email, password, is_staff=False,
|
---|
44 | is_superuser=False, **kwargs)
|
---|
45 |
|
---|
46 | def create_superuser(self, username, email, password, **kwargs):
|
---|
47 | return self._create_user(username, email, password, is_staff=True,
|
---|
48 | is_superuser=True, **kwargs)
|
---|
49 |
|
---|
50 |
|
---|
51 | class Account(AbstractBaseUser, PermissionsMixin, BaseModel):
|
---|
52 | username = models.CharField(max_length=100, unique=True)
|
---|
53 | email = models.EmailField(max_length=254, unique=True)
|
---|
54 | first_name = models.CharField(max_length=255, blank=True)
|
---|
55 | last_name = models.CharField(max_length=255, blank=True)
|
---|
56 | is_staff = models.BooleanField(default=False)
|
---|
57 | is_active = models.BooleanField(default=True)
|
---|
58 |
|
---|
59 | objects = AccountManager()
|
---|
60 |
|
---|
61 | USERNAME_FIELD = 'username'
|
---|
62 | REQUIRED_FIELDS = ['email']
|
---|
63 |
|
---|
64 | def get_full_name(self):
|
---|
65 | return '{0} {1}'.format(self.first_name, self.last_name)
|
---|
66 |
|
---|
67 | def get_short_name(self):
|
---|
68 | return self.first_name
|
---|
69 |
|
---|
70 | def __str__(self):
|
---|
71 | return self.username
|
---|
72 |
|
---|
73 | def email_user(self, subject, message, from_email=None, **kwargs):
|
---|
74 | raise NotImplementedError()
|
---|
75 |
|
---|