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

Django社交网站点击关注按钮报错:User matching query does not exist

问题分析

错误User matching query does not exist出现在Profile_view的user_object = User.objects.get(username=pk)行,核心原因是Follow视图重定向时传递的参数错误,导致pk不是有效的用户名字符串,进而触发查询失败。

修复步骤

1. 修正Follow视图的重定向参数

原代码中return redirect('profile',username=follower_user)直接传递了User对象,但Profile_view接收的pk是用户名字符串,需改为传递对象的username属性:

def Follow(request):
    if request.method == "POST":
        follower_username = request.POST.get('follower')
        user_username = request.POST.get('user')
        
        # 先校验POST参数是否存在,避免KeyError
        if not follower_username or not user_username:
            return redirect('home')
        
        # 增加用户查询的异常处理,避免无效用户名导致崩溃
        try:
            follower_user = User.objects.get(username=follower_username)
            user_user = User.objects.get(username=user_username)
        except User.DoesNotExist:
            return redirect('home')

        # 用exists()判断关注关系更高效
        if FollowersCount.objects.filter(follower=follower_user, user=user_user).exists():
            FollowersCount.objects.filter(follower=follower_user, user=user_user).delete()
        else:
            # create()方法自动保存,无需额外调用save()
            FollowersCount.objects.create(follower=follower_user, user=user_user)
    
    # 修正:传递用户名字符串而非User对象,参数名要和URL配置一致
    return redirect('profile', pk=follower_user.username)

注意:如果你的URL配置中Profile_view的参数名是username,就把pk=改成username=,必须和urls.py里的定义完全匹配。

2. 给Profile_view增加异常处理(推荐)

即使传参正确,也要处理用户/Profile不存在的情况,避免页面崩溃:

def Profile_view(request,pk):
    try:
        user_object = User.objects.get(username=pk)
    except User.DoesNotExist:
        # 重定向到首页或404页面
        return redirect('home')
    
    # 处理Profile不存在的情况,自动创建默认Profile或返回错误
    try:
        user_profile = Profile.objects.get(user=user_object)
    except Profile.DoesNotExist:
        user_profile = Profile.objects.create(user=user_object)
    
    user_post = Post_Upload.objects.filter(user=user_object)
    following_count = FollowersCount.objects.filter(follower=user_object).count()
    followers_count = FollowersCount.objects.filter(user=user_object).count()
    post_count = user_post.count()
    
    context = {
        "user_profile":user_profile,
        "user_post":user_post,
        "post_count":post_count,
        "following_count":following_count,
        "followers_count":followers_count,
        }
    return render(request, 'profile.html',context)

3. 检查URL配置一致性

确保urls.py中Profile_view的参数定义和视图接收的参数名一致,比如:

path('profile/<str:pk>/', views.Profile_view, name='profile'),

如果URL里写的是<str:username>,视图函数就要改成def Profile_view(request, username):,同时重定向时用username=follower_user.username。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:17:45