2011-12-19 120 views
0

我有以下代碼:Django的:過濾器外鍵

 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

沒關係。指定.filter()的結果顯然更好... – 2011-12-19 12:35:33

回答

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)