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

Django:基于ManyToManyField筛选用户关注问题的Answer对象

如何筛选当前用户关注问题的Answer对象?

你可以通过Django的跨模型关联查询来实现这个需求,直接在Answer的查询中通过关联的Question模型筛选出被当前用户关注的问题即可。正确的查询代码如下:

# 获取当前用户关注问题的所有回答
user_followed_answers = Answer.objects.filter(question__followers=request.user)

代码解释:

  • 这里用了双下划线__来实现跨模型的链式查询,question__followers表示先定位到Answer对应的Question实例,再筛选出该Question的followers集合中包含request.user的记录。
  • 因为followers是Question与用户模型的多对多字段,直接用=request.user就能精准匹配出所有被当前用户关注的问题,进而关联到对应的回答。

如果需要进一步优化查询结果,比如去重(虽然每个Answer本身是唯一的,但若有特殊场景需要)或排序,可以追加对应的方法:

# 去重(按需使用)
user_followed_answers = Answer.objects.filter(question__followers=request.user).distinct()

# 按回答创建时间倒序排序(假设你给Answer模型加了created_at字段)
user_followed_answers = Answer.objects.filter(question__followers=request.user).order_by('-created_at')

另外,你也可以先获取用户关注的所有问题,再关联查询回答,效果完全一致:

followed_questions = request.user.question_set.all()
user_followed_answers = Answer.objects.filter(question__in=followed_questions)

不过第一种写法更简洁,Django ORM会自动优化查询语句,避免额外的数据库请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:36:49