Django中管理员如何访问指定用户的模型数据?
解决方案
你不需要直接从request.POST中取用户ID,利用Django表单的cleaned_data能更安全地拿到验证后的User实例,直接访问其内置模型数据:
修正后的视图代码
from django.contrib.auth.models import User from django.shortcuts import render @login_required def data_form(request): if request.user.is_staff: selected_user_info = None if request.method == 'POST': form = DataRequestForm(request.POST) if form.is_valid(): # 从验证后的表单数据中直接获取User实例 selected_user = form.cleaned_data['user'] print(f"选中用户: {selected_user.username}") # 提取该用户的内置模型数据 selected_user_info = { '用户名': selected_user.username, '邮箱': selected_user.email, '注册日期': selected_user.date_joined, '是否活跃': selected_user.is_active, '管理员权限': selected_user.is_superuser, # 其他需要的User字段都可以按此方式获取 } else: # GET请求时初始化空表单 form = DataRequestForm() # 将表单和用户数据传递到模板渲染 return render(request, 'your_template.html', { 'form': form, 'selected_user_info': selected_user_info }) else: # 非员工用户返回权限不足页面 return render(request, '403_forbidden.html')
关键说明
form.cleaned_data['user']:表单验证通过后,cleaned_data中的user是直接的User模型实例,无需再通过ID查询数据库。- 访问用户字段:通过
selected_user.字段名即可获取Django内置User模型的所有字段,比如first_name、last_name、last_login等。 - 模板展示:在模板文件中,可通过
{{ selected_user_info.用户名 }}这类语法直接渲染用户数据。
补充:若有自定义用户扩展模型
如果你的项目通过OneToOneField扩展了用户模型(比如UserProfile),可以这样获取扩展数据:
from .models import UserProfile # 获取关联的扩展模型数据 user_profile = selected_user.userprofile print(f"用户昵称: {user_profile.nickname}")
内容的提问来源于stack exchange,提问作者Olney1
相关产品推荐
相关产品推荐

