Advertisement
Guest User

Untitled

a guest
Aug 15th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. from django.db import models
  2. from django.utils import timezone
  3. from django.contrib.auth.models import (AbstractBaseUser,
  4. BaseUserManager as DjBaseUserManager)
  5.  
  6. from model_utils.managers import InheritanceManager
  7.  
  8.  
  9. class BaseUserManager(DjBaseUserManager, InheritanceManager):
  10. """
  11. Manager for all Users types
  12. create_user() and create_superuser() must be overriden as we do not use
  13. unique username but unique email.
  14. """
  15.  
  16. def create_user(self, email=None, password=None, **extra_fields):
  17. now = timezone.now()
  18. email = BaseUserManager.normalize_email(email)
  19. u = GenericUser(email=email, is_superuser=False, last_login=now,
  20. **extra_fields)
  21. u.set_password(password)
  22. u.save(using=self._db)
  23. return u
  24.  
  25. def create_superuser(self, email, password, **extra_fields):
  26. u = self.create_user(email, password, **extra_fields)
  27. u.is_superuser = True
  28. u.save(using=self._db)
  29. return u
  30.  
  31.  
  32. class CallableUser(AbstractBaseUser):
  33. """
  34. The CallableUser class allows to get any type of user by calling
  35. CallableUser.objects.get_subclass(email="my@email.dom") or
  36. CallableUser.objects.filter(email__endswith="@email.dom").select_subclasses()
  37. """
  38. objects = BaseUserManager()
  39.  
  40.  
  41. class AbstractUser(CallableUser):
  42. """
  43. Here are the fields that are shared among specific User subtypes.
  44. Making it abstract makes 1 email possible in each User subtype.
  45. """
  46. email = models.EmailField(unique=True)
  47. is_superuser = False
  48. objects = BaseUserManager()
  49.  
  50. def __unicode__(self):
  51. return self.email
  52.  
  53. USERNAME_FIELD = 'email'
  54. REQUIRED_FIELD = USERNAME_FIELD
  55.  
  56. class Meta:
  57. abstract = True
  58.  
  59.  
  60. class GenericUser(AbstractUser):
  61. """
  62. A GenericUser is any type of system user (such as an admin).
  63. This is the one that should be referenced in settings.AUTH_USER_MODEL
  64. """
  65. is_superuser = models.BooleanField(default=False)
  66.  
  67.  
  68. class Professional(AbstractUser):
  69. """
  70. User subtype with specific fields and properties
  71. """
  72. company = models.CharField(max_length=50)
  73.  
  74.  
  75. class Individual(AbstractUser):
  76. """
  77. User subtype with specific fields and properties
  78. """
  79. name = models.CharField(max_length=50)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement