【发布时间】:2014-11-01 21:29:51
【问题描述】:
假设我有一个模型类Parent 和一个类Child。并且 child 有一个名为 status 的字段以及与 Parent 的 ForeignKey 关系。
假设我通过调用 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