2016-03-04 44 views
3

该网站是从ecchi animes放养pantsu的图片,通过色彩,角色的名字,动漫的名字,和内衣的类型可能的研究,而不与订单的任何重要性您选择选择任何的标准。Django的请求,只显示第一个结果

我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] 

这仍然是正确的,这个女孩目前只对我的数据库一个pantsu它是白色的。现在这样的:

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

再次正确的,但来这里的错误的部分,如果我想从我的数据库获取所有女孩的颜色,只有具有这2个女孩,我会得到的结果一样,[白,粉红色,黑色]或类似的东西,但我不知道。看。

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

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

为什么我不能得到查询集的各个领域相匹配的结果呢?我错过了什么吗?

+0

这将是更好,如果你能表明该模型,而不是他们的描述的相关部分 – Sayse

+2

是'girlList'两个丫头对象的列表?那么你可能需要'Color.objects.filter(pantsu__P_Girl__in = girlList)' – ilse2005

+0

@ ilse2005 - 'girlList'是我想到的初始查询集(片段1) – Sayse

回答

2

使用__in

Color.objects.filter(pantsu__P_Girl__in=girlList) 

__in接受一个列表作为输入,并返回所有与列表中的任何

环节相关女孩属性的记录,但按问题,如果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)) 

此过滤所有没有女孩为无

+0

就是这样它的作品。非常感谢,我会尽力寻找到关于它的文档会谈,看看还有什么我可能已经错过了。 – Wolorin

+0

我在我的答案中链接了文档;) – ilse2005

4

好颜色的物体,从而girllist是你必须使用__in列表:

Color.objects.filter(pantsu__P_Girl__in=girlList) 

否则就只能使用第一个条目在列表中。

+0

虽然是正确的,但我不禁想到,因为girl_list包含了每个女孩,所以这可能是更高效的查询 – Sayse

+0

就是这样!谢谢你的作品! – Wolorin

+1

@Sayse然后我想我们可以使用'〜Q(pantsu__P_Girl = None)'如果它总是所有Girl对象 –