是我的理解(从我在代码中观察到的内容),如果我做类似:
的事情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]))
另外,链式过滤器是否会遇到搜索子集小于包含的行的潜在问题?
尝试使用q:
from django.contrib.db.models import Q
,然后
Distinct_Alert.objects.filter(somefield=somevalue).exclude(~Q(number__in=somelist))