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

MobileCustomer类未定义password字段引发数据库迁移错误求助

问题解决:Django migrate时password字段不可为空报错

问题原因

你的MobileCustomer继承了AbstractUser,而AbstractUser自带不可为空的password字段。当数据库中已有MobileCustomer的表(存在现有数据行),执行迁移时需要为所有现有行填充password值,但未指定默认值,因此触发该错误。

修复方案

方案一:临时快速处理(测试环境适用)

当migrate命令弹出选项时,选择选项1,输入一个Django兼容的哈希密码作为默认值(可先在Django shell中执行from django.contrib.auth.hashers import make_password; print(make_password('你的临时密码'))生成哈希值,再复制输入)。

  • 注意:该操作会将所有现有用户的密码统一设置为这个默认值,生产环境慎用,会导致旧用户无法用原密码登录。

方案二:代码层定义默认值(生产环境推荐)

  1. 修改MobileCustomer模型,添加password字段并指定哈希默认值(同时移除冗余的PermissionsMixin继承,因为AbstractUser已包含该类):
    from django.contrib.auth.hashers import make_password
    from django.contrib.auth.models import AbstractUser, Permission
    from django.utils.translation import gettext_lazy as _
    
    class MobileCustomer(AbstractUser):
        email = models.EmailField(_('email address'), unique=True)
        first_name = models.CharField(max_length=120, default='')
        last_name = models.CharField(max_length=120, default='')
        contact = models.CharField(max_length=120, default='')
        user_permissions = models.ManyToManyField(
            Permission,
            verbose_name=_('user permissions'),
            blank=True,
            help_text=_('The permissions this user has'),
            related_name='mobileuser_set'
        )
    
        # 为password字段设置哈希默认值
        password = models.CharField(_('password'), max_length=128, default=make_password('initial_default_pwd'))
    
        USERNAME_FIELD = 'email'
        REQUIRED_FIELDS = ('username',)
    
        objects = MobileUserManager()
        
        def __str__(self):
            return self.email
    
  2. 生成迁移文件:
    python manage.py makemigrations
    
  3. 执行迁移:
    python manage.py migrate
    
  4. (生产环境后续操作):通过后台管理或脚本为现有用户重置真实密码后,可移除该默认值配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:52:46