2015-12-01 7 views
7

this question後、私はDjangoのフィルタステートメントで__inと等号(=)の違いは何ですか?

.filter(league_pk__in=[1,2,3]) 

.filter(league=[1,2,3]) 

を書くことの違いは、私は両方を試してみましたし、彼らがどこにも私のコードで同じ結果を返しませんが、ように見えるがあれば知りたいのですがドキュメンテーションは、彼らは同じことだと言っています(as with __exact)。

2つのフォームが等しいと見なすことはできますか?それはどこに文書化されていますか?

+2

リーグが多対多分野のですか? – doniyor

答えて

5

あなたのモデルでどのような関係が定義されているかわからないと、わからないことがあります。

print your_qs.filter(league_pk__in=[1,2,3]).query 
print your_qs.filter(league=[1,2,3]).query 

を、実際デシベルレベルで何が起こっているかを確認するために生成されたSQLを見て:私はあなたを与えることができ、彼らが同等かどうか確認のためにあなたを教えてくれますクエリをチェックする方法、です。

+0

私はこのメソッドを使って、 'league'がForeignKeyであるにもかかわらず、生成されたクエリが同一であることを見てきました。おそらく、それが異なっている場合と同じである場合があります。あなたの答えは可能なすべてのさらなる質問を解決します。どうもありがとう! – Saturnix

+0

私はこの「機能」が追加されたチケットを探しています。私はdjangoのバージョンを聞いてもらえますか?以前のバージョンはリスト[1,2,3]を整数に変換しようと試みることができ、もちろんここで失敗します。 – wim

+0

私は間違っていました。あなたがリストを提供しても(私が質問したように)うまくいきません。あなたがPythonリストを提供する場合は、 "__in"を使わなければなりません。しかし、あなたがDjango QuerySetを提供してもうまくいきます。この場合、 "__in"と "="の両方を使用することができ、同じ結果が得られます。 – Saturnix

0

私はあなたの最初のクエリに対しておおよそだと思う、それはやっている:2番目のクエリのために

SELECT * FROM model WHERE model.league_id IN (SELECT id FROM league WHERE id IN(1, 2, 3)) 

を、それはやっている:

SELECT * FROM model WHERE model.league_id IN (1, 2, 3) 
関連する問題