2012-02-20 42 views
0

考慮一個標籤數組,T。django conjunctive filter __in查詢

每個PhotoSet都有與標籤的多對多關係。

我們也有一個過濾器,F(由一組標籤的),我們想返回誰已包含在F.

即所有標籤全部的photosets ,.如果F = [ '綠色', '狗', '貓'],我們希望有所有在F.

標籤每PhotoSet例如自然

不會做的伎倆,因爲它返回 PhotoSet包含F.

我看到它可以利用「Q」表達式中使用類似的事情的任何成員,但似乎只針對合取參數數量是有限的。這是否可以使用列表理解來完成?

在此先感謝!

編輯 - 解決方案:

我發現解決方案使用一種明顯的方式。簡單地鏈接過濾器...

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

感謝您的答覆。如果我想出的解決方案不起作用,我會嘗試。哪個順便說一下,你知道哪種方法最有效嗎? – 2012-02-20 22:37:56

+0

它們的效率應該相當。無論哪種方式,數據庫實際上只被擊中一次,查詢應該大致相同。 – 2012-02-20 22:41:57