38 lines
917 B
Python
38 lines
917 B
Python
|
|
from django.contrib.auth.models import AbstractUser
|
||
|
|
from django.contrib.auth.models import UserManager as BaseUserManager
|
||
|
|
from django.db.models import Q
|
||
|
|
from django.db import models
|
||
|
|
|
||
|
|
|
||
|
|
class CustomUserManager(BaseUserManager):
|
||
|
|
"""Manager that allows lookup by username, email, or phone_number."""
|
||
|
|
|
||
|
|
def get_by_natural_key(self, username):
|
||
|
|
return self.get(
|
||
|
|
Q(username=username) | Q(email=username) | Q(phone_number=username)
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class User(AbstractUser):
|
||
|
|
phone_number = models.CharField(
|
||
|
|
max_length=32,
|
||
|
|
unique=True,
|
||
|
|
db_index=True,
|
||
|
|
)
|
||
|
|
email = models.EmailField(
|
||
|
|
"email address",
|
||
|
|
unique=True,
|
||
|
|
db_index=True,
|
||
|
|
)
|
||
|
|
|
||
|
|
USERNAME_FIELD = "username"
|
||
|
|
REQUIRED_FIELDS = ["email", "phone_number"]
|
||
|
|
|
||
|
|
objects = CustomUserManager()
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
db_table = "users"
|
||
|
|
|
||
|
|
def __str__(self):
|
||
|
|
return self.username
|