2015-01-21 88 views
1
2個SearchQuerySets的

所以我有一個類似的模式:交叉口的Django

class Whatever(SlugMixin, models.Model): 
    user = models.ForeignKey(auth_models.User, related_name='user+', verbose_name=_('User'), on_delete=models.PROTECT) 
    name = models.CharField(verbose_name=_('Name'), max_length=200) 

我想找到屬於該用戶,並具有其搜索項匹配的名稱的所有對象。

我已經明白了,這樣做:

SearchQuerySet().filter(text=searched_term).filter(user=user) 

將無法​​正常工作。它返回給我這兩者的結合。但是,我想要這兩個條件的交集,而不是聯合。我知道這是因爲用戶和文本屬於不同的模型。

回答

4

只是爲了確保我們在同一頁什麼工會和路口的意思是,讓我們拿一個簡單的例子:

組A = [1, 2, 3]

B組= [2, 3, 4, 5]

交叉口A和B.將[2, 3]

和工會A和B.將[1, 2, 3, 4, 5]

如果您正在尋找交集:

desired_queryset = Whatever.objects.filter(user=user, name=searched_term) 

如果您正在尋找聯盟:

from django.db.models import Q 
desired_queryset = Whatever.objects.filter(Q(user=user) | Q(name=searched_term)) 
+0

是的,我實際使用相同的操作,只是我使用「文本= searched_term」,而不是「NAME = searched_term」。看來還有另一個導致奇怪結果的bug。如果searled_term的長度是1,則該過濾器將被忽略。將不得不深入挖掘。 – elena 2015-01-21 14:59:23