Проблема с createsuperuser при реализации пользовательской модели пользователя
Я пытаюсь реализовать свою собственную модель пользователя в Django 1.6, но я получаю эту ошибку.
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
utility.execute()
File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/core/management/base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/core/management/base.py", line 285, in execute
output = self.handle(*args, **options)
File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 141, in handle
self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
TypeError: create_superuser() missing 1 required positional argument: 'email'
вот мой UserManager
class UserManager(BaseUserManager):
def _create_user(self, username, email, password, is_staff, is_superuser, **extra_fields):
now = timezone.now()
email = self.normalize_email(email)
user = self.model(username=username, email=email,
is_staff=is_staff, is_active=False,
is_superuser=is_superuser, last_login=now,
date_joined=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, username, email=None, password=None, **extra_fields):
return self._create_user(username, email, password, False, False,
**extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
user=self._create_user(username, email, password, True, True,
**extra_fields)
user.is_active=True
user.save(using=self._db)
return user
похоже, что это будет довольно прямолинейно, но я не могу понять, почему я получаю эту ошибку в первую очередь, потому что у меня есть электронная почта, указанная в моей функции create_superuser. Я просмотрел несколько учебных пособий в интернете и не вижу, как это реализуется по-разному. Может кто-нибудь объяснить что я делаю не так?
2 ответов
смотрим код для команд управления он запрашивает только поля вREQUIRED_FIELDS
атрибут (а также имя пользователя). Этот атрибут содержит электронную почту по умолчанию в AbstractBaseUser, но если вы его переопределили - или не унаследовали от этой модели в первую очередь (что вы должны делать) - тогда электронная почта не будет запрашиваться и не передается методу create_superuser.
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField('username', max_length=150, unique=True)
email = models.EmailField('email address', unique=True, max_length = 255)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
для меня выше код просто решить проблемы.