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

Django中如何获取当前登录用户的完整详情数据

Django查询用户对象仅返回用户名的解决方法

你列出的三种查询写法本身没有问题,正常情况下返回的User对象会包含所有用户表字段,你看到仅返回用户名,基本是以下两种认知误区或场景问题:

  • 直接打印User对象实例时,Django默认User模型的__str__方法只返回username字段值,不代表对象仅存储了用户名
  • 接口序列化返回时,序列化配置仅指定了username字段,没有声明其他需要返回的字段

正确获取完整用户信息的方式

1. 直接访问对象属性取值

拿到User对象后,通过.运算符直接访问对应字段即可获取值,Django默认User模型自带的常用字段包括id、username、email、first_name、last_name、is_staff、is_active、date_joined,示例代码:

# 三种查询方式任意一种都可以,拿到的对象属性是完整的
user = request.user
# 按需取值即可
user_id = user.id
user_email = user.email
user_join_time = user.date_joined

如果你使用了继承AbstractUser的自定义User模型,自己扩展的手机号、头像等自定义字段,也可以直接通过属性访问,比如user.phone、user.avatar。

2. 关联扩展用户表的取值方式

如果你没有替换默认User模型,而是通过OneToOneField外键关联建了用户扩展表(比如存储用户额外的部门、工号等信息),需要通过反向关联拿到扩展表数据:

user = request.user
# 反向关联属性名默认为关联模型名的小写格式,如果设置了related_name就替换为你自定义的名称
user_extra_info = user.userprofile
user_department = user_extra_info.department
user_emp_no = user_extra_info.emp_no

3. 接口返回完整用户信息的配置

如果是前后端分离接口返回JSON时仅拿到用户名,需要调整序列化配置,明确声明需要返回的字段,以DRF为例:

from rest_framework import serializers
from django.contrib.auth import get_user_model
User = get_user_model()

class UserInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        # 把你需要返回的所有字段都写到列表里
        fields = ["id", "username", "email", "first_name", "last_name", "date_joined"]

# 视图中使用
user = request.user
serializer = UserInfoSerializer(user)
# 返回的data就会包含你配置的所有字段
return Response(serializer.data)

注意:不要尝试直接把User对象强转为字典或者直接丢给响应方法,必须明确指定需要返回的字段,避免泄露密码等敏感信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:27:17