You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模型迁移报错:无法为User模型添加非空password字段

解决Django自定义User模型迁移时的password字段非空错误

方式一:迁移时直接提供临时默认哈希值

当终端弹出错误提示的选项时,选择选项1,按以下步骤生成并输入合法的密码哈希值:

  1. 新开一个终端窗口,进入Django Shell:
python manage.py shell
  1. 在Shell中生成密码哈希串:
from django.contrib.auth.hashers import make_password
print(make_password('temp123456'))
  1. 复制输出的长哈希字符串(格式类似pbkdf2_sha256$600000$xxxxxx...),粘贴到迁移提示的输入框中确认。
  2. 迁移完成后,务必通知现有用户重置密码,或通过后台批量更新为安全密码,避免临时密码泄露风险。

方式二:在模型中临时添加默认值(更可控)

  1. 修改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等设置...
  1. 执行迁移命令:
python manage.py makemigrations
python manage.py migrate
  1. 迁移成功后,立即移除模型中新增的password字段定义(AbstractUser已自带该字段),再次执行迁移更新:
python manage.py makemigrations
python manage.py migrate

额外注意

如果是项目首次配置自定义User模型,需确保在settings.py中已指定:

AUTH_USER_MODEL = '你的应用名.User'

若此前已执行过默认auth模块的迁移,可能需要清空数据库或回滚迁移后重新操作。

内容的提问来源于stack exchange,提问作者abu abu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:11:07