我想将生成的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
我该怎么办?
答案 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
实例上可用。