Пользовательская модель Django выдает ошибку: TypeError: create_superuser () получил неожиданный аргумент ключевого слова 'username' - PullRequest
0 голосов
/ 01 мая 2018

Я создаю пользовательского пользователя Django на основе учебника, как показано ниже:

class UserProfileManager(BaseUserManager):
    """Helps Django work with our custom user model."""

    def create_user(self, email, name, password=None):
        """Creates a user profile object."""

        if not email:
            raise ValueError('Users must have an email address.')

        email = self.normalize_email(email)
        user = self.model(email=email, username=name)

        user.user_id = -1
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, email, name, password):
        """Creates and saves a new superuser with given details."""

        user = self.create_user(email = email, name = name, password = password)

        user.is_superuser = True

        user.save(using=self._db)


class CustomUser(AbstractBaseUser, PermissionsMixin):
    """Represents a user profile inside our system"""

    email = models.EmailField(max_length=255, unique=True)
    username = models.CharField(max_length=255, unique=True)
    user_id = models.IntegerField()

    objects = UserProfileManager()

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    def __str__(self):
        return self.email

И я получаю следующую ошибку при попытке создать суперпользователя:

TypeError: create_superuser () получил неожиданный аргумент ключевого слова 'username'

Однако, если я изменю имя поля «username» на «name», я смогу создать суперпользователя без ошибок! Кто-нибудь знает, почему я не могу назвать поле чем-либо, кроме «name»?

1 Ответ

0 голосов
/ 02 мая 2018

В вашей функции вы определили параметр username как name:

...
def create_superuser(self, email, name, password):
    ...

И в какой-то другой части вашего кода или даже внутри самого django. Может быть, кто-то вызывает вашу create_superuser функцию с username='some-username'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...