2012-03-21 11 views
2

私は同じクラス(モデル)タイプの2つのオブジェクトを持っています。私はM2Mフィールドの交差点を確認したい。生のSQLを使用せずにこれを行う効率的な方法はありますか?効率的なDjangoのM2M交差点を確認するには?

ここに、私の現在の解決策があります。私は交差点の権利を理解している場合

genres_a = [g for g in profile_a.genres.all()] # Convert to List 
genres_b = set([g for g in profile_b.genres.all()]) # Convert to Set 

if genres_b.intersection(genres_a): # Look for Intersection (Not Lazy) 
    print True # Do something... 
+0

可能重複[?Djangoのクエリを持つ2つの多対多のフィールドを交差方法](http://stackoverflow.com/questions/8129431/how- – jterrace

+0

おそらく、私は2つのM2Mフィールドを交差させる方法を尋ねるのではなく、効率的な操作方法を探していました。 – Kurtis

答えて

1

profile_a.genres.all().filter(id__in=profile_b.genres.all()) 
+0

ありがとう!私は実際にもっと効率的かどうかを確認するために、これを試してみましょう。私はちょうど私の 'if'ステートメントでそれを使用するために、その末尾に.exists()を追加する必要があります。 – Kurtis

+1

もっと効率的かどうかは分かりませんが、データベースにはデカルト積があることがわかります.SQLに結果があればテスト用に.exists()を追加する必要があります – diegueus9

関連する問題