You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中get_or_create赋值时下划线_的作用及访问问题

问题原因与解决方法

核心原因

Django的get_or_create()方法返回的是一个元组,结构是(查询/创建的对象实例, 是否新创建的布尔值):

  • 第一个元素是你要的User对象
  • 第二个元素是布尔值(True表示刚创建了新用户,False表示是从数据库查询到的已有用户)

当你写user, _ = ...时,是做元组解包:把元组的第一个元素赋值给user,第二个元素用_(常规占位符,表示不需要这个值)忽略。但如果你去掉, _,直接user = ...,那user变量存的是整个元组,而不是User对象——元组没有name属性,自然没法通过user.name访问字段。

解决方法

有两种方式能让你通过user变量访问name字段:

  1. 保留元组解包(推荐):
    如果你不需要知道用户是否是新创建的,就用_占位;如果需要,就用变量接收第二个值:
    # 不需要创建状态时
    user, _ = User.objects.get_or_create(name=serializer.data['name'], email=serializer.data['email'], password=make_password(serializer.data['password']))
    # 需要知道是否新创建时
    user, created = User.objects.get_or_create(...)
    # 此时user是User实例,可正常访问user.name
    
  2. 直接取元组第一个元素:
    如果你不想用解包,也可以手动取元组的索引0位置的元素:
    user = User.objects.get_or_create(name=serializer.data['name'], email=serializer.data['email'], password=make_password(serializer.data['password']))[0]
    # 同样能拿到User实例,正常访问user.name
    

内容的提问来源于stack exchange,提问作者corneliusstone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:55:00