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]))

另外,链式过滤器是否会遇到搜索子集小于包含的行的潜在问题?

尝试使用q:

from django.contrib.db.models import Q

,然后

 Distinct_Alert.objects.filter(somefield=somevalue).exclude(~Q(number__in=somelist))

最新更新