Django自定义User模型报错no such table 无法创建超级用户求助
解决方案
报错根本原因
该报错是Django未成功生成Accounts应用下自定义User模型对应的数据库表导致,常见诱因有三个:
Accounts应用未添加到settings.py的INSTALLED_APPS配置中- 首次执行迁移后才修改
AUTH_USER_MODEL配置,旧迁移文件与自定义用户模型冲突 - 自定义User模型中字段配置有问题,导致迁移执行失败
开发环境快速修复(可删除测试数据的情况)
- 检查基础配置
确认settings.py中存在以下配置,无拼写错误:
# 1. 已注册Accounts应用 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'Accounts', # 必须存在该行 ] # 2. 自定义用户模型配置正确 AUTH_USER_MODEL = 'Accounts.User'
另外你当前模型中的phone字段为IntegerField且未设置允许为空或默认值,生成迁移时会要求输入默认值,可提前修改为允许为空避免后续报错:
# 原代码 phone = models.IntegerField() 替换为 phone = models.IntegerField(null=True, blank=True, verbose_name="手机号")
清理旧迁移和数据库
删除项目根目录下的SQLite数据库文件db.sqlite3,再删除所有应用(含自带应用、Accounts应用)migrations目录下除__init__.py之外的全部文件。重新执行迁移
依次执行以下命令:
# 生成迁移文件 python manage.py makemigrations # 执行迁移生成表 python manage.py migrate
- 创建超级用户
python manage.py createsuperuser
按提示输入邮箱、密码即可完成创建。
生产环境修复(不可删除现有数据的情况)
- 先回滚auth应用的所有迁移:
python manage.py migrate auth zero
- 删除
Accounts应用下migrations目录中除__init__.py之外的所有文件 - 单独生成Accounts应用的迁移文件:
python manage.py makemigrations Accounts
- 执行全量迁移:
python manage.py migrate
内容的提问来源于stack exchange,提问作者Harish Kumar
相关产品推荐
相关产品推荐

