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

Django查询当前登录用户关注者的帖子仅展示单用户内容如何解决

问题原因

视图函数中的for循环存在逻辑错误:每次遍历关注用户时,都会给posts变量重新赋值,循环结束后posts仅会保留最后一个遍历到的关注用户的帖子,因此页面只展示一名用户的内容。
同时原代码中profile = Profile.objects.filter(user = user)返回的是查询集而非单个Profile对象,若模板需要调用单个Profile属性会出现异常。

修复方案

推荐方案:优化ORM查询(仅需1次数据库查询,性能更高)

直接使用Django ORM跨表查询获取所有关注用户的帖子,修改followerspost视图代码如下:

def followerspost(request):
  user = request.user
  # 改用get获取单个Profile对象
  profile = Profile.objects.get(user = user)
  followings = user.profile.followings.all()
  # 批量查询所有关注用户的帖子,按发布时间倒序排列符合社交产品使用习惯
  posts = NewPost.objects.filter(user__in=followings).order_by('-timestamp')

  return render(request,"network/following.html",{
    "user" : user,
    "profile" : profile,
    "followings" : followings,
    "posts" : posts,
  })

可选方案:保留循环逻辑(不推荐,关注用户较多时会产生多次数据库查询,性能较差)

初始化空查询集存储所有帖子,每次遍历后合并查询结果:

def followerspost(request):
  user = request.user
  profile = Profile.objects.get(user = user)
  followings = user.profile.followings.all()
  # 初始化空的NewPost查询集
  posts = NewPost.objects.none()
  for following in followings:
    # 合并当前关注用户的帖子到总查询集
    posts |= NewPost.objects.filter(user = following)
  # 统一按发布时间倒序
  posts = posts.order_by('-timestamp')

  return render(request,"network/following.html",{
    "user" : user,
    "profile" : profile,
    "followings" : followings,
    "posts" : posts,
  })

额外优化建议

模板中循环变量名存在重名问题,容易引发潜在异常,建议修改:
将{% for posts in posts %}调整为{% for post in posts %},对应循环内的posts.user、posts.timestamp、posts.post同步修改为post.user、post.timestamp、post.post,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:03