这是模型:
class ModelA:
title = charfield
m2m = foreignkey, relatedname='m2ms'
这是有效的:
ModelA.objects.filter(Q(title__icontains='a') & Q(title__icontains='b'))
所以它返回所有标题包含字母“a”和“b”的记录。
然后同样不适用于多对多:
ModelA.objects.filter(Q(m2ms__id=1) & Q(m2ms__id=2))
ModelA m2ms 列表:
for x in ModelA.objects.all():
print x.m2ms.all().values_list('id', Flat=True)
#Output:
1,2,3
1,2
1
1,3,5
4,6,7
1,8
因此,ModelA.objects.filter(Q(m2ms__id=1) & Q(m2ms__id=2)) 的预期输出应该是具有这些 m2m id 的记录:[1,2,3],[1,2]。但它没有发生。为什么 ?
我不能使用 Q(m2ms__id__in=[1,2]) 因为即使我做 __in=[1,2,3,4,infinite numbers] 它返回相同
这个问题中提到了使用 Q 而不是过滤器的原因 - django filter on many to many with Q