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

Django展示用户头像报错:MultipleObjectsReturned问题求助

解决Django中UserProfileInfo的MultipleObjectsReturned错误

错误原因

UserProfileInfo.objects.get()未指定过滤条件,而数据库中存在6条UserProfileInfo记录,get()方法要求必须且仅返回一条数据,因此触发该错误。由于你的模型与User是一对一关联,应该获取当前登录用户对应的那条记录。

解决方案

修改视图代码,通过当前登录用户过滤UserProfileInfo:

方法一:直接通过外键过滤

@login_required
def profile(request):
    data = {
        "info": UserProfileInfo.objects.get(user=request.user)
    }
    return render(request, 'dappx/profile.html', data)

方法二:使用反向关联(推荐)

因为User和UserProfileInfo是一对一关系,Django会自动为User模型添加反向关联属性(默认是模型名小写,即userprofileinfo),可以直接通过当前用户获取:

@login_required
def profile(request):
    data = {
        "info": request.user.userprofileinfo
    }
    return render(request, 'dappx/profile.html', data)

优化:处理用户未创建Profile的情况

如果存在用户未创建UserProfileInfo的场景,建议使用get_object_or_404避免DoesNotExist异常:

from django.shortcuts import get_object_or_404

@login_required
def profile(request):
    data = {
        "info": get_object_or_404(UserProfileInfo, user=request.user)
    }
    return render(request, 'dappx/profile.html', data)

额外检查

确保数据库中每个User只对应一条UserProfileInfo记录,避免一对一关联数据冗余。可以通过后台管理页面清理重复的关联记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:34:52