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
相关产品推荐
相关产品推荐

