这是我的理解(从我在我的代码观察到的),如果我这样做: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我编辑了这个问题来更准确地描述我的情况,我不相信它是重复的。 –