自定义AuthUser模型后访问Django Admin及创建超级用户报错
解决Django自定义用户模型后表不存在的问题
问题重现
使用DRF AuthToken实现Token认证,自定义了AuthUser模型,执行makemigrations和migrate后,访问/admin或执行createsuperuser时出现错误:
django.db.utils.ProgrammingError: (1146, "Table 'roadmap.tutor_authuser' doesn't exist")
解决方案
1. 确认settings.py中已配置自定义用户模型
必须在项目配置中指定自定义用户模型,否则Django仍会使用默认的auth.User:
# settings.py AUTH_USER_MODEL = 'tutor.AuthUser'
注意:这个配置必须在第一次执行migrate前设置,如果之前已经迁移过默认用户表,需要按步骤3处理。
2. 验证迁移是否实际应用
运行以下命令查看迁移状态:
python manage.py showmigrations
检查tutor应用下的迁移是否带有[X]标记,表示已应用。如果没有,重新执行迁移:
python manage.py migrate tutor
如果还是没生效,尝试重新生成迁移文件:
python manage.py makemigrations tutor python manage.py migrate tutor
3. 清理数据库重新迁移(适用于之前创建过默认用户表的情况)
如果在设置AUTH_USER_MODEL之前已经执行过migrate,会导致默认用户表和自定义用户表冲突,需要彻底清理:
- 删除项目根目录下的数据库文件(如
db.sqlite3,如果是MySQL/PostgreSQL则清空对应数据库) - 删除所有应用下
migrations文件夹中的迁移文件(保留__init__.py) - 删除
migrations文件夹下的__pycache__目录 - 重新执行:
python manage.py makemigrations python manage.py migrate python manage.py createsuperuser
4. 检查迁移文件的正确性
查看tutor应用的迁移文件,确认AuthUser的创建语句正确。可以通过以下命令查看生成的SQL:
python manage.py sqlmigrate tutor 0001_initial
确认输出中包含创建tutor_authuser表的语句。
内容的提问来源于stack exchange,提问作者Suraj_7879
相关产品推荐
相关产品推荐

