根据条件获取Django QuerySet.values()
假设我有一个模型类叫做 Parent
,还有一个类叫做 Child
。在 Child
类里,有一个叫 status
的字段,并且它和 Parent
之间有一个外键关系。
比如,我通过调用 p = Parent.objects.filter(pk=1)
来获取一个父类的实例,这样我就得到了一个查询集。
接下来,如果我调用 p.values('children__name')
,我会得到一个字典列表,里面是这个父类所有孩子的名字。
我的问题是,如果我想调用 p.values('children__name')
,但只想获取那些孩子的名字,前提是他们的 status
是特定的,我该怎么做呢?
我还想确保原来的查询集不被改变,因为我不想对它进行过滤(特别是当查询集很大的时候)。我只是想根据某个参数来过滤值。例如,如果我想列出所有父母和状态为 'SICK' 的孩子,我就不想调用 p.filter(children__status='SICK').values('children__name')
,因为那样会把父母也过滤掉。我希望保留所有的父母,只是把 children__name
的值过滤到那些状态特定的孩子。这样说清楚了吗?
在 Django 中有没有办法做到这一点?
1 个回答
0
p = Parent.objects.filter(age=50)
sick_children = p.filter('children__status='sick').values('children__name')
查询结果不会被改变,除非你把过滤条件赋值给 p
。