有一个Article模型,它有多对多类别字段。我想通过那个字段过滤它,但它没有像我预期的那样工作。例如:
MyModel.objects.filter(categories__id__in = [0, 1, 2])
它得到类别为0和1的模型,即使它没有id为2的类别。我尝试这样做:
MyModel.objects.filter(Q(categories__id = 0) & Q(categories__id = 1) & Q(categories__id = 2))
但它甚至不起作用。如果它有所有这些类别它甚至不会得到model
顺便说一下,我不想使用一个以上的过滤器方法
那么,对我有什么解决办法吗?
谢谢。
p。S: django AND on Q不适合多对多-同样的问题,但作者仍然没有得到答案。
您可以计算是否匹配三个Category
,从而只检索三个匹配的项:
from django.db.models importCount
MyModel.objects.filter(
categories__id__in=[0, 1, 2]
).annotate(
category_count=Count('categories')
).filter(category_count=3)