Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
Mysql Django查询两次返回相同的对象_Mysql_Django_Filter_Duplicates - Fatal编程技术网

Mysql Django查询两次返回相同的对象

Mysql Django查询两次返回相同的对象,mysql,django,filter,duplicates,Mysql,Django,Filter,Duplicates,通用示例。当我做这样的查询时 a = MyObject.objects.filter(...) a将包含过滤器匹配的所有内容。当我这样做时: a.filter(...) a将只包含匹配两个过滤器的对象,对吗?在第一个filter()之后,我可能有5个元素,然后在第二个filter()之后,我可能还有这5个元素中的2个 我的一个查询得到了奇怪的结果。以下查询: >>> Item.objects.filter(account__in=Account.objects.filter

通用示例。当我做这样的查询时

a = MyObject.objects.filter(...)
a将包含过滤器匹配的所有内容。当我这样做时:

a.filter(...)
a将只包含匹配两个过滤器的对象,对吗?在第一个filter()之后,我可能有5个元素,然后在第二个filter()之后,我可能还有这5个元素中的2个

我的一个查询得到了奇怪的结果。以下查询:

>>> Item.objects.filter(account__in=Account.objects.filter(customer=a), disabled=False)
[<Item: PSN-100396>]
>>Item.objects.filter(account\uu in=account.objects.filter(customer=a),disabled=False)
[]
这就产生了一个结果。请记住,100396是主键,因此此idnetifier只能有一个项。现在,当我应用一个附加过滤器时,该过滤器应仅显示禁用发票或无发票上的项目:

>>> Item.objects.filter(account__in=Account.objects.filter(customer=a), disabled=False).filter(Q(iteminv__invoice__disabled=False) | Q(iteminv__isnull=True))
[<Item: PSN-100396>, <Item: PSN-100396>]
>>Item.objects.filter(account\uu in=account.objects.filter(customer=a),disabled=False)。filter(Q(iteminv\uu invoice\uu disabled=False)| Q(iteminv\uu isnull=True))
[, ]
我用同一个物体得到这个结果两次。。。这怎么可能?我误解了什么吗

将其全部放在一个筛选器()中会产生相同的输出:

>>> Item.objects.filter(Q(account__in=Account.objects.filter(customer=a)), Q(disabled=False), Q(iteminv__invoice__disabled=False) | Q(iteminv__isnull=True))
[<Item: PSN-100396>, <Item: PSN-100396>]
>>Item.objects.filter(Q(account\uu in=account.objects.filter(customer=a))、Q(disabled=False)、Q(iteminv\uu invoice\uu disabled=False)| Q(iteminv\uu isnull=True))
[, ]

Django版本1.6.2

由于在过滤多对多关系或反向外键关系时涉及连接,因此实例可能会在结果集中出现两次(在这种情况下,Django将主要应用可产生重复的
内部连接)。因此,您应该在查询集上使用
distinct()
。(sql查询中的联接使一个
在表中为它与
帐户
的每个关系显示)

有关筛选多对多关系的信息,请参见


编辑:如果您想使用SQL/和/或检查生成的查询,请执行类似于
print Item.objects.filter(您的\u查询)的操作。查询

是否查看了SQL查询?它可能会在某个地方加入进来。似乎这就是正在发生的事情。在谷歌搜索时,我发现我可以通过添加.distinct()来进行分类,但我不明白为什么它会产生重复项。我已经使用Django有一段时间了,我从未见过这种行为,即使是在复杂的查询上