Django中如何实现嵌套过滤(Filter of Filter/Query of Query)
Django嵌套过滤实现方案
首先先修正你模型里的拼写错误:ForeingKey应该写成ForeignKey,不然会报语法错误。
针对你的需求,有两种简洁的实现方式:
方法一:基于已查询的Person集合过滤Detail
你之前的错误在于x是Person对象的QuerySet集合,不是单个id,所以不能用=匹配,需要用__in来指定“属于某个集合”的条件:
def test(request, id_user): # 先筛选出指定user的Person记录 x = Person.objects.filter(user_id=id_user) # 筛选person_id属于x中记录id的Detail数据 y = Detail.objects.filter(person__in=x) # 或者等价写法:用person_id__in配合values_list取id集合 # y = Detail.objects.filter(person_id__in=x.values_list('id', flat=True))
方法二:一步到位的关联过滤(更高效)
Django支持跨外键的链式过滤,不需要先查询Person,直接通过Detail的外键关联到Person的user_id,一次查询完成:
def test(request, id_user): y = Detail.objects.filter(person__user_id=id_user)
这种方式只需要一次数据库查询,比先查Person再查Detail的两次查询更高效。
内容的提问来源于stack exchange,提问作者LK_223
相关产品推荐
相关产品推荐

