2012-02-20 13 views
0

タグの配列を検討してください。django結合フィルタ__inクエリ

各フォトセットにはタグと多対多の関係があります。

我々はまた、(タグのセットで構成)F、フィルタを持っている、と我々はF.

すなわちに含まれるすべてのタグを持つすべてのphotosetsを返すようにしたいです、。もしF = [ '緑'、 '犬'、 '猫']、私たちが望むすべて F.

のタグを持つすべてのフォトセットのインスタンス当然

トリックをしません、それはを返しますので、すべてのフォトセットは、私はそれが「Q」の表現を用いて同様のものを使用することも可能ですが、唯一の連言パラメータの有限量のために見えたことがわかりF.

のいずれかのメンバーが含まれています。これは、リストの理解を使用して行うことができますか?

ありがとうございます!

編集:解決:

解決策は明らかな方法で見つかりました。フィルタを連鎖するだけです...

results = PhotoSets.objects 
for f in F: 
    results = results.filter(tags__in=[f]) 
results = results.all() 

私はいつも顔を見つめていました!

答えて

2

リトル迅速かつ汚いが、それはトリックやる:応答のための

query = None 
for tag in F: 
    if query is None: 
     query = Q(tags=tag) 
    else: 
     query &= Q(tags=tag) 

PhotoSet.objects.filter(query) 
+0

感謝を。私が考え出した解決策がうまくいかなかったら、私はそれを試してみるだろう。どちらのアプローチが最も効率的であるか知っていますか? –

+0

これらは効率が同等でなければなりません。いずれにしても、データベースは実際には1回だけヒットし、クエリはほぼ同じになるはずです。 –