【问题标题】:Django Getting QuerySet.values() based on conditionDjango 根据条件获取 QuerySet.values()
【发布时间】:2014-11-01 21:29:51
【问题描述】:

假设我有一个模型类Parent 和一个类Child。并且 child 有一个名为 status 的字段以及与 ParentForeignKey 关系。

假设我通过调用 p = Parent.objects.filter(pk=1) 调用过滤器(以便拥有一个 QuerySet)来检索一个父对象

现在,如果我打电话给p.values('children__name'),我将收到一份包含孩子姓名的字典列表。

我的问题是,如果我想调用 p.values('children__name'),但仅当孩子的 status 是特定的时才限制值,我该怎么做?

我还想确保原始 QuerySet 保持不变,因为我不想过滤掉它(对于更大的 QuerySet)。我只想过滤基于某些参数的值。例如,如果我想列出所有状态为“SICK”的父母和孩子,那么我不想打电话给p.filter(children__status='SICK').values('children__name'),因为这会过滤父母。我希望仍然保留所有父母,只需将“children__name”的值过滤到具有特定状态的人。这有意义吗?

在 Django 中有没有办法做到这一点?

【问题讨论】:

  • p 仍将包含所有父母,或者在这种情况下为 1,因为如果您根据孩子生病的状态进行过滤,您会奇怪地过滤主键。如果您不将结果分配给p,则不会修改原始查询集。
  • 是的,我的示例仅过滤了主键,但假设我过滤了其他内容。假设Parent.objects.filter(age=50)。现在我不想丢失在那里过滤的所有父母,而只获取基于 sick 条件的值。很抱歉没有很好地澄清自己。

标签: python django django-queryset


【解决方案1】:
p = Parent.objects.filter(age=50)
sick_children = p.filter('children__status='sick').values('children__name')

除非您将过滤器分配给p,否则不会修改查询集。

【讨论】:

  • 没错,但sick_children 不会将所有父母都包含在p 中,这正是我所需要的。所以最后我想要一个查询集,它的所有父母都在p,但只有当状态为sickchildren__name的值。这可能吗?
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 2022-06-28
  • 2022-10-14
相关资源
最近更新 更多