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)
问题原因
- normalize_email参数错误:将字符串
'email'传给了normalize_email方法,而非变量email,导致邮箱被错误处理为固定字符串"email"。 - 重复传递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
相关产品推荐
相关产品推荐

