Django的auth应用程序提供了一个内置的用户模型(User model):auth.models.User。 但是,你也可以自己定义一个用户模型,继承自Django的抽象基类AbstractBaseUser或AbstractUser。 在这种情况下,你可以使用.model.User(AbstractUser)。
区别在于继承的基类。 auth.models.User继承自AbstractBaseUser(内置的用户模型),而.model.User(AbstractUser)直接继承自AbstractBaseUser。
以下是一个示例,根据需要选择继承的基类:
from django.db import models
from django.contrib.auth.models import AbstractUser, BaseUserManager, AbstractBaseUser
# 继承自auth.models.User
class CustomUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, related_name='custom_user')
# 添加自定义字段
# ...
# 继承自AbstractBaseUser
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
"""
Creates and saves a User with the given email and password.
"""
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
"""
Creates and saves a superuser with the given email and password.
"""
user = self.create_user(
email=email,
password=password,
)
user.is_admin = True
user.save(using=self._db)
return user
# 继承自AbstractBaseUser
class CustomUser(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email