2013-11-14 14 views
7

私はこの動作を観察しており、あまり理解していません。返さDjango:values_listの値がprefetch_related/select_relatedの有無を確認してください

[1,2,3,4] 

その後、私は特定の値がPKSのリストにあるかどうかを確認したい:

result = model.objects.all() 
result_pks = result.values_list("id",flat=True) 
print result_pks 

そして、私が手に:私は、クエリを作成しましょう

val = 2 
print val in result_pks 

これをTrueを返しますが、代わりに結果を次のように変更します。

result = model.objects.prefetch_related("related_field").all() 
result_pks = result.values_list("id",flat=True) 
print result_pks 

私はまだ取得:

[1,2,3,4] 

しかし、私は実行します。

val=2 
print val in result_pks 

私はFalseを取得します。代わりにselect_relatedを使ってみましたが、期待どおりTrueを返しました。誰かが私になぜ違いを説明することができますか?

+0

どのようなDjangoのバージョンを使用していますか? –

答えて

7

Django 1.5をお使いですか?

prefetch_relatedbug 20242を使用すると、inルックアップが失敗するバグがありました。

これはDjango 1.6で修正されました。

+0

したがって、修正は 'print val in list(result_pks)' – karthikr

+0

ありがとうございました。私はGAE – CoffeeJack

+0

のために1.4を使用しています。@CoffeeJack:バグがいつ導入されたかはわかりませんが、Django 1.4でもそうかもしれません。 –

関連する問題