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

自定义User模型创建超级用户后无法登录Django Admin求助

自定义Accounts模型无法登录Django Admin?看这几个关键点就能解决

我仔细看了你的代码和问题描述,马上发现了一个明显的错误,再结合MongoDB的使用场景,整理出几个必查的修复点:

1. 先搞定超级用户的is_staff字段设置错误

你的MyAccountManager里创建超级用户的代码有个笔误:

user.staff=True  # 这里字段名错了!

而你的Accounts模型里对应的字段是is_staff,不是staff!这直接导致你创建的超级用户is_staff还是默认的False,而Django Admin必须要求用户is_staff=True才能登录,这就是你收到错误提示的核心原因之一。

赶紧修改这段代码:

def create_superuser(self, email, username, password):
    user = self.create_user(
        email=self.normalize_email(email),
        password=password,
        username=username,
    )
    user.is_admin=True
    user.is_staff=True  # 改成is_staff,对应模型字段
    user.is_superuser=True
    user.save(using=self._db)
    return user

修改后,记得重新创建超级用户:

  • 先通过MongoDB客户端删除之前创建的超级用户文档,或者用Django Shell执行删除操作
  • 重新运行python manage.py createsuperuser生成新的超级用户

2. 确认MongoDB的字段存储正确性

因为你用MongoDB代替了默认的SQL数据库,要检查这几点:

  • 你用的是djongo这类适配Django的MongoDB库,且版本和当前Django版本兼容
  • 查看MongoDB中超级用户的文档,确认is_staff、is_admin、is_active这几个字段的值都是true
  • 确认password字段存储的是Django标准的哈希值(你的代码里调用了user.set_password(password),这部分是对的,只要没改默认的密码哈希逻辑就没问题)

3. 检查认证后端配置

默认的ModelBackend是支持自定义用户模型的,但为了保险起见,你可以在settings.py里显式指定认证后端:

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
]

确保没有其他冲突的认证后端被配置在这里。

4. 自定义Admin登录表单(可选兜底方案)

如果前面的步骤都做了还是有问题,可以自定义Admin的登录表单,强制让它用邮箱作为登录字段:

在accounts/admin.py里添加这段代码:

from django.contrib.admin.forms import AdminAuthenticationForm
from django.contrib.auth import get_user_model
from django import forms

class CustomAdminAuthenticationForm(AdminAuthenticationForm):
    username = forms.EmailField(label='Email')

    def clean_username(self):
        email = self.cleaned_data['username']
        User = get_user_model()
        if not User.objects.filter(email=email).exists():
            raise forms.ValidationError('邮箱或密码错误')
        return email

# 替换Admin站点的默认登录表单
from django.contrib import admin
admin.site.login_form = CustomAdminAuthenticationForm

完成这些操作后,重启Django服务,用新创建的超级用户邮箱和密码登录,应该就能顺利进入Admin面板了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:27:51