Django自定义User模型
学习如何用AbstractUser扩展Django默认用户模型,添加自定义字段。 · 难度:入门 · +15XP
为什么需要自定义User
Django自带的User模型包含username、email、password等字段。但实际项目可能需要手机号、头像、生日等额外字段。官方推荐在项目初期就使用自定义User模型。
方法一:继承AbstractUser
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone = models.CharField(max_length=15, unique=True)
avatar = models.ImageField(upload_to='avatars/', blank=True)
birth_date = models.DateField(null=True, blank=True)
# 可以添加自定义方法
def get_full_name(self):
return f"{self.first_name} {self.last_name}"settings配置
AUTH_USER_MODEL = 'myapp.CustomUser'必须在第一次迁移之前设置。
Admin注册
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
fieldsets = UserAdmin.fieldsets + (
(None, {'fields': ('phone', 'avatar', 'birth_date')}),
)
admin.site.register(CustomUser, CustomUserAdmin)| 方法 | 说明 |
|---|---|
| AbstractUser | 保留默认字段,可扩展 |
| AbstractBaseUser | 完全自定义,需要更多工作量 |
练习提示: 修改starter_code中的模型,继承AbstractUser并添加bio字段。在admin.py中注册并显示该字段。