0

「フォロー」できる人のリストがあるとしましょう。

特定のユーザーがフォローしているすべての人を繰り返し処理し、それらすべてのユーザーからクエリセットの形式で投稿を取得したいと思います。

chain または | を使用してクエリセットを結合できることは理解していますが、フォローされているすべての人をループして取得する可能性のあるクエリセットを結合することになると、少し混乱します。

    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()、1 つのクエリでユーザーを取得するメソッドを追加することをお勧めします。データベースからリストを取得する前に、リストをキャッシュすることも検討する必要があると思い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 に答える