這是我的理解(從我在我的代碼觀察到的),如果我這樣做:Django的Q過濾器返回很多沒有結果的許多領域
Distinct_Alert.objects.filter(somefield=somevalue)
我應該得到的是該查詢完全匹配的行,與說
Distinct_Alert.objects.filter(somefield=somevalue, entities__in=somelist)
說,我的列表包括3個要素,我有可以匹配的要素之一,那麼它將返回該行的行。我想要做的只是如果它匹配列表中的所有元素,這是可能的嗎?
我試着做以下幾點:
Distinct_Alert.objects.filter(Q(alert_type=alert_type) & reduce(operator.and_, [Q(entities=c) for c in entities]))
實體是一個多對多的領域,由於種種原因,這始終是一個沒有返回比賽,即使我可以很符合這個確切條件的行。 Q不適用於許多領域?
按照建議,我已經試過鏈接和它的工作原理,但這種做法感覺錯了,靠不住
chained_query = Distinct_Alert.objects.filter(alert_type=alert_type)
for entity in entities:
chained_query = chained_query.filter(entities=entity[0])
這將返回正確的結果,但這並不:
Distinct_Alert.objects.filter(Q(alert_type=alert_type) & reduce(operator.and_, [Q(entities=c[0]) for c in entities]))
而且,鏈式過濾器是否會遇到潛在的問題,其中搜索的子集小於包含集合的行?
的[Django的篩選查詢集\ _ \ _在\ *每\ *在列表項(HTTP可能重複://計算器.com/questions/8618068/django-filter-queryset-in-for-every-item-in-list) –
嘿@ShangWang我編輯了這個問題來更準確地描述我的情況,我不相信它是重複的。 –