2016-10-22 3 views
0

の値に基づいてフィルタ処理しようとすると、私は別のテーブル

class ItemFollowers(models.Model): 
    item = models.ForeignKey(Items, models.DO_NOTHING, db_column='item') 
    user = models.ForeignKey(AuthUser, models.DO_NOTHING, db_column='user') 

として2つのテーブルがあり、もう一つはどのように私はいくつか続いitemsに関連UsrPostsを選択することができます

class UsrPosts(models.Model): 
    item = models.ForeignKey('Items', models.DO_NOTHING, db_column='item') 
    # Some other fields 

ですuser?つまり、(item0、user0)、(item1、user0)、(item5、user0)のようなItemFollowersのレコードを持つことができます。私はここでは、ユーザ(別名。request.user.id

UsrPostts

itms = ItemFollowers.objects.filter(user_id=request.user.id) 
qry = Q(item_id=itms[0].item.id) | ..... | Q(item_id=itms[N].item.id) 
posts = UsrPosts.objects.filter(qry) 

を得るために非効率的な非稼働の方法であるに基づいてUsrPostsをフィルタリングする必要があるいくつかのフィルタの魔法は1つのトランザクションでそれを得るためにありますか?

答えて

1
itms = ItemFollowers.objects.filter(user_id=request.user.id).values‌​_list('item') 
posts = UsrPosts.objects.filter(item__in = itms) 
+0

ありがとうございます!最初の行にわずかなエラーがあります。それは 'ItemFollowers.objects.filter(user_id = request.user.id).values_list( 'item')'でなければなりません。 1つのトランザクションでより良い回答が得られない場合は、これを受け入れられた回答とします。百万回ありがとう! –

+0

django_debug_toolbarを使って、実際には、これらの2行を実行するのに1つのクエリがかかるようです。再度、感謝します! –