如果您需要更复杂的用户模型,可以通过扩展 AbstractUser
或 AbstractBaseUser
来创建自定义用户模型。
2.1 使用 AbstractUser
通过继承 AbstractUser
,您可以添加额外的字段。
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True, null=True)
在 settings.py
中指定自定义用户模型:
AUTH_USER_MODEL = 'yourapp.CustomUser'
2.2 使用 AbstractBaseUser
如果您需要完全控制用户模型,可以继承 AbstractBaseUser
。
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
if not email:
raise ValueError('The Email field must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password, **extra_fields)
class CustomUser(AbstractBaseUser):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
2.3 创建和迁移自定义用户模型
在定义自定义用户模型后,您需要创建和应用迁移:
python manage.py makemigrations
python manage.py migrate