抱歉我的解释不好,但我正在像这样审查我教授的代码:
user, _ = User.objects.get_or_create(
name = serializer.data['name'],
email = serializer.data['email'],
password = make_password(serializer.data['password']))
当我从中删除“,_”时,我无法访问它的对象(例如:名称)。我在做 “user.name”,但我不能没有“,_”有人可以解释为什么会这样。 这是我第一次来这里所以呵呵
我想通过分配我创建的对象的用户访问名称字段
_
是一个变量,实际上 _
是一个有效的变量名称。 _
通常用于“丢弃”变量:我们对结果并不真正感兴趣的变量。因此,您编写的代码相当于:
user, created = User.objects.get_or_create(
name=serializer.data['name'],
email=serializer.data['email'],
password=make_password(serializer.data['password']),
)
除了我们现在将其分配给名为
created
而不是 _
的变量。
.get_or_create(…)
[Django-doc]返回一个2元组:
返回
的元组,其中object是检索或创建的对象,created是一个布尔值,指定是否创建了新对象。(object, created)
如果你写:
x, y = some_2_tuple
它“解包”
some_2_tuple
,其中 x
被指定为 2 元组的第一项,而 y
被指定为第二项。这可以扩展到任意数量的变量。有关更多信息,请参阅 扩展的可迭代拆包 [pep]。
当我从中删除“,_”时,我无法访问它的对象(例如:名称)。我正在做“用户名”
如果删除
, _
,它会显示为 user = User.objects.get_or_create(…)
,因此 user
是一个 2 元组。然后您可以使用 user[0]
访问用户对象,但在这里解包可能更方便。