0

假设我有一个可以“关注”的人员列表。

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

我知道我可以通过使用链或 | 来组合查询集,但是在组合查询集时我有点困惑,我可能会从被跟踪的每个人中循环获取。

    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?

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

4

2 回答 2

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在从数据库中获取列表之前对其进行缓存。

于 2012-09-18T21:18:10.397 回答
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) 
于 2012-09-18T21:22:52.933 回答