Q object Django在和togeth时返回空QuerySet

2024-06-26 00:24:30 发布

您现在位置:Python中文网/ 问答频道 /正文

在djangoshell中,当我过滤单个Q对象时,它返回正确的QuerySet。但是当相同的Q对象是和时,它返回一个空的QuerySet。在

File.objects.filter(Q(relatedjira__content__icontains='1112'))
<QuerySet [<File: abc.txt>]>

File.objects.filter(Q(relatedjira__content__icontains='5368'))
<QuerySet [<File: abc.txt>]>

但是当我将Q对象与AND组合时,它返回空集:

^{pr2}$

Tags: and对象txtobjectscontentfilterfilequeryset
2条回答

对于组合查询,它只返回具有单个relatedjira的文件,其中内容同时包含'1112'和{}。在

如果您将Q对象放在单独的过滤器中,那么它将返回具有relatedjira的文件,其中内容包含'1112',另一个{},其中内容包含'5368'

File.objects.filter(Q(relatedjira__content__icontains='1112')).filter(Q(relatedjira__content__icontains='5368'))
<QuerySet [<File: abc.txt>]>

这是合乎逻辑的。如果查询相关的对象,那么Django的过滤机制是存在的:因此,如果一个^{{cd1>}具有此内容,就足够了。

但是,如果对关系执行多个过滤器,这些都会对相同的相关对象产生影响。对于给定的^{cd2>},可能有两个^{cd3>},一个具有^{{cd4>},另一个具有^{cd5>},但如果使用这两个查询,则不会生成元素,因为两个^{{cd3>}是不同的。

例如:

+       -+      +   -+      +       -+
| RelatedJura   |  ->  | File1 |  <-  | RelatedJira   |
+       -+      +   -+      +       -+
| content: 5368 |                     | content: 1112 |
+       -+                     +       -+

您的第一个查询读取:

Give me the Files for which there is a related jira where the content contains 1112.

这是成功的。

第二个查询的内容如下:

Give me the Files for which there is a related jira where the content contains 5368.

这是成功的。

但最后一个查询是:

Give me the Files for which there is a related jira where the content contains 1112 and 5368.

这是失败的,因为没有包含两个子字符串的^{cd3>}。

相关问题 更多 >