繁体   English   中英

如何在Django中进行三级查询?

[英]How to three-level query in Django?

我有三个表,名称分别为ABC

class A(models.Model):
    name = models.CharField(max_length=12)

class B(models.Model):
    name = models.CharField(max_length=12)
    a = models.ForeignKey(to=A)

class C(models.Model):
    name = models.CharField(max_length=12)
    email = models.EmailField()
    b = models.ForeignKey(to=B)

我想获取以下数据:

[
    {"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')

然后,您可以遍历数据并以所需的格式构建列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM