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

Django REST Framework过滤主键后无法获取当前登录用户问题

问题解决指导

一、profile视图调用接口返回空数据的问题

原因

在profile视图里用requests.get调用user_profile_info接口时,这个请求是全新的HTTP请求,不会携带当前登录用户的会话(session)信息,导致user_profile_info中的request.user是匿名用户,其id为None,自然查不到任何User数据,返回空数组。

解决方法

方案1:直接在视图内获取数据(推荐)

无需通过HTTP请求调用自身接口,直接在profile视图中查询数据库获取用户数据,高效且避免会话问题:

@login_required
def profile(request):
    user = User.objects.filter(id=request.user.id).first()
    userData = {"user": [UserSerializer(user).data]} if user else {"user": []}
    print(userData)
    return render(request, 'profile.html')

方案2:传递会话Cookie

如果必须保留接口调用的方式,需要把当前请求的会话Cookie传递给requests:

@login_required
def profile(request):
    response = requests.get(
        'http://127.0.0.1:8000/user_profile_info/',
        cookies=request.COOKIES
    )
    userData = response.json()
    print(userData)
    return render(request, 'profile.html')

二、自定义User模型数据库无对应表的问题

原因

  1. 未在settings.py中配置AUTH_USER_MODEL,Django默认使用自带的auth.User模型,你的自定义User模型未被启用为认证模型。
  2. 可能未生成或应用针对自定义User模型的迁移文件。

解决方法

  1. 配置认证用户模型:在项目settings.py中添加(替换为你的app名称,假设models.py在myapp下):
AUTH_USER_MODEL = 'myapp.User'

注意:该配置必须在首次执行迁移前设置;若已执行过迁移,需清理旧迁移文件和数据库中对应记录(操作前请备份数据)。

  1. 生成并应用迁移:

    • 删除app下migrations文件夹中除__init__.py外的所有文件,同时清理数据库django_migrations表中对应app的迁移记录。
    • 执行命令:
      python manage.py makemigrations
      python manage.py migrate
      
  2. 注册Admin管理:在admin.py中注册自定义User模型(若未注册):

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:11:01