Django ManyToMany Queryset和而不是OR

Django ManyToMany Queryset和而不是OR,django,Django,我有以下疑问: things = Thing.objects.filter(tags__in=selected_tags).distinct() 如果选定的_标记如下所示: selected_tags = [<Tag: tag1>, <Tag: tag2>] selected_标签=[,] 然后,对象将包含任何具有tag1或tag2的对象 我想要一个查询,该查询将为我提供包含tag1和tag2的内容(甚至可能是tag3,但不一定)。最好的方法是什么?\u在中是固有的

我有以下疑问:

things = Thing.objects.filter(tags__in=selected_tags).distinct()
如果选定的_标记如下所示:

selected_tags = [<Tag: tag1>, <Tag: tag2>]
selected_标签=[,]
然后,对象将包含任何具有tag1或tag2的对象


我想要一个查询,该查询将为我提供包含tag1和tag2的内容(甚至可能是tag3,但不一定)。最好的方法是什么?

\u在
中是固有的或基于的。它的字面意思是拉出任何一行有这些标签中的任何一个。要创建基于和的查询,需要分别筛选每个标记:

Thing.objects.filter(tags=tag1, tags=tag2, ...)
这显然不理想,不幸的是,在这种情况下,您甚至不能使用扩展字典,因为所有键都是相同的。因此,您唯一的其他选择是使用
Q

from django.db.models import Q

query = None
for tag in tags:
    if query is None:
        query = Q(tags=tag)
    else:
        query &= Q(tags=tag)

things = Thing.objects.filter(query)
这有点复杂,但是如果您需要动态创建查询(而不是只对搜索的每个标记进行硬编码),那么这是您最好的选择