Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-如何将AuthUser id(PK)分配给用户名?_Python_Django_Django Models_Django Users - Fatal编程技术网

Python Django-如何将AuthUser id(PK)分配给用户名?

Python Django-如何将AuthUser id(PK)分配给用户名?,python,django,django-models,django-users,Python,Django,Django Models,Django Users,我想将生成的id分配给AuthUser模型的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. """

我想将生成的
id
分配给AuthUser模型的
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

如何操作?

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

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

,如我在评论中所述,我建议给
用户名
一个虚拟值,用于暂时保存模型,然后在保存后更改该值

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
每次都会更改为
id
,因此用户名的唯一性不会出现问题。

试试像Nope这样的方法怎么样。Django要求将
username
作为必填字段。我将无法
保存
,将
后保存
放在一边。如果我没有错,
user.id
将是
,直到创建数据库行,这意味着
非用户名
将始终是
真的
?为什么不在
user.save(使用=self.\u DB)
之后分配
用户名
,因此,您可以获取用户对象的
id
,然后再次保存它。正确,但Django要求用户名作为必填字段。如何保存它?我在其他评论中注意到关于所需用户名的评论,但您保存时没有它。Bijoy的随机用户解决方案是可以接受的,因为您可以立即更改它,另外,您是否尝试过空字符串?