如何从Profile模型获取User查询集并正确创建好友关联?
解决方案
你的问题核心是invited_user获取的是Profile查询集,而Friends.objects.create()的invited参数需要User实例,而非Profile对象或查询集。以下是修正后的代码和关键说明:
关键修正点
- 因为
invite_code是unique=True的,所以用get()而非filter()获取单个Profile实例(filter返回查询集,get返回单个对象) - 通过Profile的
user外键属性,拿到对应的User实例,传给invited参数 - 增加异常捕获,处理邀请码不存在的情况,避免程序崩溃
修正后的Post函数代码
def post(self, request: HttpRequest) -> HttpResponse: invite_code = request.POST['invite_code'] current_user = request.user try: # 获取对应邀请码的Profile实例,再取出关联的User对象 invited_profile = Profile.objects.get(invite_code=invite_code) invited_user = invited_profile.user # 创建好友关系 Friends.objects.create(inviting=current_user, invited=invited_user) # 可选:标记被邀请用户的was_invited为True invited_profile.was_invited = True invited_profile.save() except Profile.DoesNotExist: # 处理邀请码不存在的情况,比如返回错误提示 return render(request, 'api_auth_user/user-profile.html', {'error': '无效的邀请码'}) return render(request, 'api_auth_user/user-profile.html')
额外说明
current_user = request.user本身就是User实例,直接传给inviting参数是正确的,无需额外处理- 建议在视图前添加登录验证(比如用
@login_required装饰器),确保request.user是已登录的有效用户
内容的提问来源于stack exchange,提问作者dkarmm
相关产品推荐
相关产品推荐

