【问题标题】:Django request showing only the first resultDjango 请求仅显示第一个结果
【发布时间】:2016-03-04 09:00:46
【问题描述】:

该网站是关于从 ecchi 动漫中储存pantsu 的照片,可能会按颜色、角色名称、动漫名称和内衣类型进行研究,而您选择任何标准的顺序并不重要。

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

我的 Girl 表有一个指向 Anime 的外键。

让我们假设:

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

再次正确,但这里是错误的部分,如果我想从我的数据库中获取所有女孩的颜色,只有这 2 个女孩,我会得到类似的结果,[White, Pink, Black],或者类似的东西,但我没有。看。

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

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

为什么我不能得到匹配查询集每个字段的结果?我错过了什么吗?

【问题讨论】:

  • 如果你能展示模型的相关部分而不是描述它们会更好
  • girlList 是两个女孩对象的列表吗?那你可能需要Color.objects.filter(pantsu__P_Girl__in=girlList)
  • @ilse2005 - girlList 是我认为的所有初始查询集 (sn-p 1)

标签: python django django-models django-queryset


【解决方案1】:

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

Color.objects.filter(pantsu__P_Girl__in=girlList)

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

【讨论】:

  • 虽然正确,但我不禁认为可能有更有效的查询,因为 girl_list 包含每个女孩
  • @Sayse 那么我想我们可以使用~Q(pantsu__P_Girl=None),如果它总是所有的 Girl 对象
  • 或没有Q: Color.objects.exclude(pantsu__P_Girl=None)
  • @AswinMurugesh - 或者只是filter(pantsu__P_Girl_isnull=False),但这假设该字段可以为空,我们无法判断,因此我要求查看实际模型
  • @Sayse 如果该字段不能为空,那么 OP 的查询没有意义,因为它总是会返回整个颜色集?
【解决方案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 的颜色对象

【讨论】:

  • 就是这样。非常感谢,我会试着找到医生谈论它的地方,看看我还漏掉了什么。
猜你喜欢
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2017-12-12
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多