Django根据条件获取QuerySet.values()

时间:2014-09-08 15:42:55

标签: python django django-queryset

假设我有一个模型类Parent和一个类Child。并且孩子有一个名为status的字段和ForeignKeyParent的关系。

假设我通过调用p = Parent.objects.filter(pk=1)

调用filter(以便拥有QuerySet)来检索一个父项

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

我的问题是,如果我想拨打p.values('children__name'),但只有当孩子的status具体时才限制价值,我该怎么做?

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

有没有办法在Django中这样做?

1 个答案:

答案 0 :(得分:0)

p = Parent.objects.filter(age=50)
sick_children = p.filter('children__status='sick').values('children__name')

除非您将过滤器分配给p

,否则不会修改查询集