Django请求只显示第一个结果

时间:2016-03-04 09:00:47

标签: python django django-models django-queryset

该网站是关于从ecchi动漫中存放pantsu的照片,可能通过颜色,角色的名称,动漫名称和内衣类型进行研究,对您选择任何标准的顺序没有任何重要性

我的Pantsu表有3个外键 - >颜色,类型,女孩

我的女孩表只有一个外国动漫给动漫。

让我们假设:

>>> girlList = Girl.objects.all()
>>> girlList
>>> [<Girl: Hanekawa Tsubasa>, <Girl: Hachikuji Mayoi>, <Girl: Hitagi Senjōgahara>]

好的,这就是我们想要的,但现在还有一件事:

>>> Color.objects.filter(pantsu__P_Girl__Girl_Name='Hachikuji Mayoi')    
[Color: White]

这仍然是正确的,这个女孩目前在我的数据库上只有一个裤子,它是白色的。现在这个:

>>> Color.objects.filter(pantsu__P_Girl__Girl_Name='Hanekawa Tsubasa')    
[Color: Black, Color: Pink]

再次纠正,但是这里出现了错误的部分,如果我想从我的数据库中获得所有女孩的颜色,只有这两个女孩,我会得到一个结果,如[白色,粉红色,黑色],或者类似的东西,但我不知道。看。

Color.objects.filter(pantsu__P_Girl=girlList)   
[Color: Pink, Color: Black]

我只从我的查询集中得到第一个元素的结果,这里我得到粉红色和黑色,因为girlList的第一个元素是Hanekawa Tsubasa,她匹配粉红色和黑色。

为什么我无法获得与查询集的每个字段匹配的结果?我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

好的,girllist是您必须使用的列表__in

Color.objects.filter(pantsu__P_Girl__in=girlList)

否则它只会使用列表中的第一个条目。

答案 1 :(得分:2)

使用__in

Color.objects.filter(pantsu__P_Girl__in=girlList)

__ in接受列表作为输入并返回与列表中任何元素相关联的Girl属性的所有记录

但是根据问题,如果girlList总是Girl.objects.all(),那么你可以使用:

Color.objects.filter(pantsu__P_Girl_isnull=False)

from django.db.models import Q
Color.objects.filter(~Q(pantsu__P_Girl=None))

这会过滤所有没有Girl as None的颜色对象