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

Django 5迁移PostgreSQL后超级用户无法登录管理后台问题

Django从SQLite迁PostgreSQL后Admin登录提示用户不存在的解决方法

核心问题排查与解决

  1. 检查超级用户的is_active状态
    你的CustomUser模型中is_active默认值为False,而Django Admin仅允许is_active=True的用户登录。即便成功创建超级用户,默认禁用状态会让系统判定用户“不存在”。
    解决步骤:

    • 启动Django Shell:python manage.py shell
    • 执行代码激活超级用户:
      from django.contrib.auth import get_user_model
      User = get_user_model()
      # 替换为你创建超级用户时使用的邮箱
      user = User.objects.get(email="你的超级用户邮箱")
      user.is_active = True
      user.save()
      

    操作完成后重新尝试登录Admin后台。

  2. 确认登录使用的认证字段
    Django Admin默认使用username字段登录,但你的CustomUser模型在save方法中将username设为name的值,若你习惯用邮箱登录会导致失败。如需支持邮箱+用户名双登录,可自定义认证后端:

    • 在项目根目录创建backends.py文件,写入以下代码:
      from django.contrib.auth.backends import ModelBackend
      from django.contrib.auth import get_user_model
      
      class EmailBackend(ModelBackend):
          def authenticate(self, request, username=None, password=None, **kwargs):
              UserModel = get_user_model()
              try:
                  user = UserModel.objects.get(email=username)
              except UserModel.DoesNotExist:
                  try:
                      user = UserModel.objects.get(username=username)
                  except UserModel.DoesNotExist:
                      return None
              if user.check_password(password):
                  return user
      
    • 在settings.py中添加认证后端配置:
      AUTHENTICATION_BACKENDS = [
          '你的项目名称.backends.EmailBackend',
          'django.contrib.auth.backends.ModelBackend',
      ]
      
  3. 验证超级用户字段完整性
    CustomUser模型中user_type为必填字段,创建超级用户时若未指定可能导致数据异常。检查并补全字段:
    在Django Shell中执行:

    from django.contrib.auth import get_user_model
    User = get_user_model()
    user = User.objects.get(email="你的超级用户邮箱")
    # 检查字段值
    print(user.user_type, user.is_active, user.username)
    # 若user_type为空,补充值并保存
    if not user.user_type:
        user.user_type = "manager"  # 可替换为你需要的用户类型
        user.save()
    

额外注意事项

  • 数据库迁移时,确保自定义用户模型的所有字段在PostgreSQL中同步完整,PostgreSQL对字段约束的检查比SQLite更严格。
  • 若业务允许,可将CustomUser模型中is_active的默认值改为True,避免后续创建用户时重复处理激活状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:20