Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中实现三级查询?_Python_Django - Fatal编程技术网

Python 如何在Django中实现三级查询?

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":

我有三张桌子,名字是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":"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')