Django-如何为用户名分配AuthUser id(PK)?

时间:2018-06-27 07:23:48

标签: python django django-models django-users

我想将生成的id分配给AuthUser Model的username列。我该怎么办?

我尝试更新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 :(得分:0)

如果我了解您的目标。您首先需要实例化一个带有用户信息(电子邮件,用户名,密码等)的用户实例,以创建用户,然后将用户保存到数据库中。保存用户后,您可以获取该用户对象并将用户名重新分配给ID:     用户= User.objects.get(用户名=用户名)     user.username = user.id 我相信您不会得到任何帮助,因为用户不存在,因此没有用户可以从中获取ID。调试并确认此行中有用户对象user = self.model(email=email, **extra_fields)

答案 1 :(得分:0)

正如我在评论中所述,我建议给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的{​​{1}}每次都会更改为'placeholder'的值,因此不会出现用户名唯一性的问题。

答案 2 :(得分:0)

尝试一下,

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

工作:
按照Django指定创建一个User实例,然后将其pk分配给username字段

答案 3 :(得分:-1)

您需要通过调用user.save将用户保存到数据库-数据库生成的id,然后在user实例上可用。