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

Django通过ForeignKey关联查询用户关注对象的Post对象方案

报错原因

你遇到的'RelatedManager' object has no attribute 'posts'错误来自两个核心问题:

  1. 关联方向写反:u.followers对应的是「所有关注了u的用户的中间表记录」,也就是u的粉丝列表,不是你需要的「u主动关注的用户」列表
  2. 模型层级理解错误:u.followers和u.following返回的都是UserFollowing中间表的关联管理器,不是User模型的实例集合,自然不存在posts这个User模型才有的反向关联属性。
    另外你的示例代码还有个笔误:Django默认模型管理器是User.objects,不是User.object。
实现方案

你需要的「指定用户关注的人发布的所有Post QuerySet」可以直接通过ORM查询实现,返回结果完全兼容你已编写好的Post序列化器:

# 1. 获取目标用户实例
u = User.objects.get(id=num)

# 2. 取出该用户主动关注的所有用户ID,flat=True直接返回ID组成的扁平列表,查询开销极低
following_user_ids = u.following.values_list('following_user_id', flat=True)

# 3. 过滤发布者ID在关注列表中的Post,得到目标QuerySet
following_posts = Post.objects.filter(user_id__in=following_user_ids)

如果要优化后续序列化的查询效率,可以提前预加载关联的User对象,避免遍历Post时重复触发数据库查询,也可以按业务需求追加排序、分页等链式操作:

following_posts = Post.objects.filter(
    user_id__in=following_user_ids
).select_related('user')  # 预加载关联的用户对象
# 示例:按发布时间倒序
# .order_by('-create_time')

这个实现的优势:

  • 返回结果是标准的Post模型QuerySet,支持所有Django ORM的链式操作,可直接传入序列化器使用
  • 查询效率高,仅用两次SQL查询即可拿到结果,没有多余的模型实例加载开销
  • 逻辑清晰,不需要修改现有模型的关联定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:27:17