Как назначить AuthUser ID (PK) для имени пользователя? - PullRequest
0 голосов
/ 27 июня 2018

Я хочу назначить id, сгенерированный для столбца username модели AuthUser. Как я могу это сделать?

Я пытался обновить UserManager, но безуспешно. Вот что я сделал.

def _create_user(self, username=None, email=None, password=None,
                 **extra_fields):
    """
    Create and save a user with the given email, and password.
    """
    email = self.normalize_email(email)
    user = self.model(email=email, **extra_fields)
    if not username:
        username = user.id  # it always returns None.

    user.username = self.model.normalize_username(username)

    user.set_password(password)
    user.save(using=self._db)
    return user

Как я могу это сделать?

Ответы [ 4 ]

0 голосов
/ 27 июня 2018

Попробуйте,

def _create_user(self, username, email, password, **extra_fields):
    user = super()._create_user(username, email, password, **extra_fields)
    user.username = user.id
    user.save()
    return user

Рабочая:
Создает экземпляр User, как указывает Django, затем присваивает ему pk username поле

0 голосов
/ 27 июня 2018

Если я понимаю вашу цель. Вам нужно начать с создания экземпляра пользователя с его информацией (адрес электронной почты, имя пользователя, пароль и т. Д.), Чтобы создать пользователя, а затем сохранить пользователя, чтобы он находился в БД. Как только пользователь был сохранен, вы можете получить этот объект пользователя и переназначить имя пользователя на id: user = User.objects.get (username = username) user.username = user.id Я полагаю, что вы ничего не получите, потому что пользователь не существует и поэтому у него нет пользователя, который бы возражал против получения идентификатора от Debug и подтвердил, что в этой строке есть пользовательский объект user = self.model(email=email, **extra_fields)

0 голосов
/ 27 июня 2018

Как я отмечал в комментариях, я предложил дать username фиктивное значение для сохранения модели на данный момент, а затем изменить значение после сохранения

def _create_user(self, username=None, email=None, password=None,
                 **extra_fields):
    """
    Create and save a user with the given email, and password.
    """
    email = self.normalize_email(email)
    user = self.model(email=email, **extra_fields)
    user.username = self.model.normalize_username('placeholder')
    user.set_password(password)
    user.save(using=self._db)

    user.username = '{}'.format(user.id)  # As the 'id' will always be unique
    user.save(using=self._db)
    return user

Значение username со значением 'placeholder' будет каждый раз изменяться на значение id, поэтому не возникает проблем с уникальностью имени пользователя.

0 голосов
/ 27 июня 2018

Вам необходимо сохранить пользователя в базе данных, вызвав user.save - id, сгенерированный БД при сохранении, станет доступным для экземпляра user.

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