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
相关产品推荐
相关产品推荐

