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

