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

Django自定义用户模型创建超级用户时触发TypeError错误

Django自定义用户模型创建超级用户报错:TypeError: got multiple values for keyword argument 'email'

执行python3 manage.py createsuperuser时终端抛出如下错误:

Traceback (most recent call last):
  File "/home/Henkan/main_store/manage.py", line 22, in <module>
    main()
  File "/home/Henkan/main_store/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 414, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.10/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 87, in execute
    return super().execute(*args, **options)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 460, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.10/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 232, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(
  File "/home/Henkan/main_store/user/managers.py", line 18, in create_superuser
    return self.create_user(email, password = None, **extra_fields)
  File "/home/Henkan/main_store/user/managers.py", line 9, in create_user
    user = self.model(email=email, **extra_fields)
TypeError: user.models.CustomUser() got multiple values for keyword argument 'email'

以下是当前的managers.py代码:

from django.contrib.auth.base_user import BaseUserManager

class UserManager(BaseUserManager):
    def create_user(self, email, password = None, **extra_fields):
        if not email:
            raise ValueError('Email is required')

        extra_fields['email'] = self.normalize_email('email')
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self.db)

    def create_superuser(self, email, password = None, **extra_fields):
        extra_fields.setdefault('is_staff',True)
        extra_fields.setdefault('is_superuser',True)
        extra_fields.setdefault('is_active',True)

        return self.create_user(email, password = None, **extra_fields)

问题原因

  1. normalize_email参数错误:将字符串'email'传给了normalize_email方法,而非变量email,导致邮箱被错误处理为固定字符串"email"。
  2. 重复传递email参数:既在extra_fields['email']中设置了邮箱,又在self.model(email=email, **extra_fields)里显式传递email=email,导致CustomUser初始化时收到重复的email参数,触发报错。

修复方案

修正create_user方法,移除重复参数传递并修复normalize_email的参数:

from django.contrib.auth.base_user import BaseUserManager

class UserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError('Email is required')

        # 修正:传入变量email而非字符串'email',并将处理后的邮箱存入extra_fields
        extra_fields['email'] = self.normalize_email(email)
        # 移除显式的email=email,直接通过extra_fields传递所有参数
        user = self.model(**extra_fields)
        user.set_password(password)
        user.save(using=self.db)
        # 补充return语句,避免后续调用无返回值问题
        return user

    def create_superuser(self, email, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)

        return self.create_user(email, password=password, **extra_fields)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:02:10