2011-12-19 20 views
0

Iは、以下のコードを有する:ジャンゴ:フィルタ外部キー

 query = Entry.objects.all() 
     print 'authors ' + repr([x.id for x in authors]) 
     print 'query ' + repr(query) 
     print 'query ids ' + repr([x.author.id for x in query]) 
     query.filter(author__in=authors) 
     print 'filtered ids ' + repr([x.author.id for x in query]) 

これを出力:

 authors [2] 
     query [<Entry: test>, <Entry: test>] 
     query ids [2, 3] 
     filtered ids [2, 3] 

明らかに、3がでない[2]。なぜ、フィルタリングIDは[2、3]であり、[2]ではないのですか?

よろしく

+1

Nevermind。 .filter()の結果を割り当てることは明らかに優れています... –

答えて

3

あなたがquery.filter(author__in=authors)を呼び出すと、それは新たなクエリセットを返します。既存のクエリーセットは変更されません。

クエリに新しいクエリセットを割り当てると、期待していた結果が得られます。

query = query.filter(author__in=authors) 
print 'filtered ids ' + repr([x.author.id for x in query]) 
1

代わりに、あなたの現在のフィルタでこれを試してみてください:

query = query.filter(author__in=authors)