Django中auth.models.User与自定义抽象User模型有何区别?
两种User模型的核心差异对比
1. Django内置User模型(django.contrib.auth.models.User)
- 是Django官方预制的完整数据库模型,直接对应数据库中的
auth_user表,自带用户名、密码、邮箱、姓名、权限状态等基础字段 - 无需额外配置就能用于用户认证、登录等功能,适合快速搭建简单项目
- 扩展性有限:要加自定义字段(如手机号、头像)只能通过
OneToOneField关联额外模型,官方不建议直接修改内置模型结构
2. 自定义抽象User模型(.models中定义的抽象模型)
- 是继承
AbstractUser或AbstractBaseUser创建的抽象基类,本身不会生成数据库表,仅作为自定义用户模型的模板 - 可完全自定义字段(比如将手机号设为登录标识、增加性别/生日字段),完美适配业务需求
- 必须在项目
settings.py中配置AUTH_USER_MODEL = "你的应用名.自定义模型名",才能让Django认证系统替换为该模型
导入注意事项
- 如果项目已经配置了自定义用户模型,却硬编码导入
django.contrib.auth.models.User,会导致操作的是内置模型,和实际数据库的用户表不匹配,引发数据异常 - 推荐统一使用
from django.contrib.auth import get_user_model动态获取当前系统的用户模型,避免硬编码路径的问题
内容的提问来源于stack exchange,提问作者static-man
相关产品推荐
相关产品推荐

