Python 如何在Django中实现三级查询?
我有三张桌子,名字是A、B、C: 我想获得以下数据:Python 如何在Django中实现三级查询?,python,django,Python,Django,我有三张桌子,名字是A、B、C: 我想获得以下数据: [ {"name":"a1", "data":[{ "name":"b1", "data":[ {"name":"c1", "data":{"c1_name":"c1_name", "c1_id":"c1_id"} }, {"name":"c2", "data":{"c2_name":
[
{"name":"a1",
"data":[{
"name":"b1",
"data":[
{"name":"c1",
"data":{"c1_name":"c1_name", "c1_id":"c1_id"}
},
{"name":"c2",
"data":{"c2_name":"c2_name", "c2_id":"c2_id"}
}
]
},
{
"name":"b2",
"data":[
{"name":"c1",
"data":{"c1_name":"c1_name", "c1_id":"c1_id"}
},
{"name":"c2",
"data":{"c2_name":"c2_name", "c2_id":"c2_id"}
}
]
}
]
}
]
你看,有三级数据,如果只有表A和表B,我可以进行多表连接查询:
B.objects.filter(a='search_id')
但是现在有三个表,您可以看到表C的电子邮件不包含在查询数据中。
如何在我的场景中实现这一需求 正如@Brian H.在评论中指出的那样,您可以将外键链接到 在您的情况下,您可以使用
C.objects.filter(b__a='search_id').values('id', 'name', 'b__name', 'b__a__name')
然后,您可以循环浏览数据并以所需格式构建列表。可能重复@BrianH。我的方案是三级连接,你的方案是两级连接。你可以使用foreignkey作为属性并添加另一个属性__
C.objects.filter(b__a='search_id').values('id', 'name', 'b__name', 'b__a__name')