Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django和on Q对多对多不起作用_Django_Django Q - Fatal编程技术网

django和on Q对多对多不起作用

django和on Q对多对多不起作用,django,django-q,Django,Django Q,模型如下: 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) &

模型如下:

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\uu id=1)和Q(m2ms\uu id=2))的预期输出应该是具有这些m2m id:[1,2,3]、[1,2]的记录。但这并没有发生。为什么?

我不能使用Q(m2ms_uuuid_uuuin=[1,2]),因为即使我使用了u in=[1,2,3,4,无限数],它也会返回相同的结果

本问题中提到了使用Q代替过滤器的原因-

阅读本节

特别是本段:

为了处理这两种情况,Django有一种处理filter()和exclude()调用的一致方法。单个filter()调用中的所有内容都将同时应用,以筛选出符合所有这些要求的项。连续的filter()调用进一步限制了对象集,但对于多值关系,它们适用于链接到主模型的任何对象,而不一定是先前filter()调用选择的对象


我相信如果你使用
ModelA.objects.filter(Q(m2ms\uu id\uu in=[1,2])
ModelA.objects.filter(m2ms\uu id\uu in=[1,2])
它会像你期望的那样工作。

为什么不使用
过滤器(Q(field=value),Q(field=value))
呢?这就是问题所在。它不起作用相当于“&”。语法错误-关键字参数重复-ModelA.objects.filter(Q(m2ms\uuuu id=1,m2ms\uu id=2))更新了答案以在