[英]How to three-level query in Django?
我有三个表,名称分别为A
, B
, C
:
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.