Django模型迁移报错:无法为User模型添加非空password字段
解决Django自定义User模型迁移时的password字段非空错误
方式一:迁移时直接提供临时默认哈希值
当终端弹出错误提示的选项时,选择选项1,按以下步骤生成并输入合法的密码哈希值:
- 新开一个终端窗口,进入Django Shell:
python manage.py shell
- 在Shell中生成密码哈希串:
from django.contrib.auth.hashers import make_password print(make_password('temp123456'))
- 复制输出的长哈希字符串(格式类似
pbkdf2_sha256$600000$xxxxxx...),粘贴到迁移提示的输入框中确认。 - 迁移完成后,务必通知现有用户重置密码,或通过后台批量更新为安全密码,避免临时密码泄露风险。
方式二:在模型中临时添加默认值(更可控)
- 修改User模型,导入密码哈希工具并临时定义带默认值的password字段:
from django.db import models from django.contrib.auth.models import AbstractUser from django.contrib.auth.hashers import make_password # 新增导入 class User(AbstractUser): # 保留原有所有字段定义... # 临时添加password字段及默认值 password = models.CharField(max_length=128, default=lambda: make_password('temp123456')) # 原有的USERNAME_FIELD、REQUIRED_FIELDS等设置...
- 执行迁移命令:
python manage.py makemigrations python manage.py migrate
- 迁移成功后,立即移除模型中新增的
password字段定义(AbstractUser已自带该字段),再次执行迁移更新:
python manage.py makemigrations python manage.py migrate
额外注意
如果是项目首次配置自定义User模型,需确保在settings.py中已指定:
AUTH_USER_MODEL = '你的应用名.User'
若此前已执行过默认auth模块的迁移,可能需要清空数据库或回滚迁移后重新操作。
内容的提问来源于stack exchange,提问作者abu abu
相关产品推荐
相关产品推荐

