组合从循环中获取的查询集

时间:2012-09-18 21:10:44

标签: python django django-queryset

假设我有一份可以“跟踪”的人员名单。

我想遍历某个用户关注的所有人,并以查询集的形式从所有这些用户那里获取帖子。

我知道我可以通过使用链或|来组合查询集,但是在组合查询集方面我有点困惑,我可能会从遍历所有人的循环中获取这些查询集。

    following = UserFollows.objects.filter(user_id = user.id)
    for follow in following.iterator():
        UserPost.objects.filter(user=follow.user) #what do I do with this?

如果我不能将它们明确地命名为chain或'|',我将如何组合?

2 个答案:

答案 0 :(得分:1)

您可以这样做:

following = UserFollows.objects.filter(user__id = user.id).select_related('user')
users_ids = [follow.user.id for follow in following]
posts = UserPost.objects.filter(user__id__in=users_ids)

但是看起来这是非常昂贵的操作,所以最好添加select_related()方法来在一个查询中获取用户。我认为您还应该考虑在从数据库获取之前缓存users_ids列表。

答案 1 :(得分:1)

你有没有试过像

这样的东西
following = UserFollows.objects.filter(user_id = user.id)
q = UserPost.objects.filter(user=following[0].user) 
for follow in following[1:]:
     q = q | UserPost.objects.filter(user=follow.user)