Python Django向后关系

Python Django向后关系,python,django,Python,Django,我正在为应用程序设置Web服务,我有以下模型: class Parent(models.Model): ... class Child(models.Model): parent = models.ForeignKey(Course) ... 关系是一对多(一个父,多个子) 现在,我想获取所有父对象及其特定子对象,并将其作为JSON请求发送。这样做是否可能,而不必首先获取所有“child”并迭代它们以查找与特定父级相关的子级? 我认为,对于真正大型的数据库来说,这将是极

我正在为应用程序设置Web服务,我有以下模型:

class Parent(models.Model):
    ...
class Child(models.Model):
    parent = models.ForeignKey(Course)
    ...
关系是一对多(一个父,多个子) 现在,我想获取所有父对象及其特定子对象,并将其作为JSON请求发送。这样做是否可能,而不必首先获取所有“child”并迭代它们以查找与特定父级相关的子级? 我认为,对于真正大型的数据库来说,这将是极其低效的,而且“Childs”不会在其他“家长”中重复出现


非常感谢

为什么需要迭代?即使Django没有为您提供特殊的向后语法,您也可以这样做:

Child.objects.filter(parent=my_parent)
但正如谷歌对你问题标题的粗略描述所显示的,向后关系有一种特殊的语法:

my_parent.child_set.all()

Django中的每个关系都会自动将其反向关系添加到模型中。对于
ForeignKey
ManyToManyField
而言,该关系包含多个对象。在这种情况下,默认属性名称设置为
\u set
,因此在本例中为
子属性集
。这是一个管理器,可以这样使用,例如迭代所有子项:

for child in parent.child_set.all():
    do_something()
您还可以使用
related_name
属性指定用于反向关系的属性名称:

class Child(models.Model):
    parent = models.ForeignKey(Parent, related_name='children')

for child in parent.children.filter(some_field=True):
    do_something()

阅读和的文档中的更多信息。

是的,在django中,您可以使用:

parentInstance.child_set.all()
其中,
parentInstance
是您的
parent
数据库中的一个特定父级。这将以高效的方式返回与之关联的所有子对象。要使其成为JSON响应,可以尝试以下方法:

import json

from django.http import HttpResponse

response_data = {}
response_data[str(parentInstance)] = parentInstance.child_set.all()
return HttpResponse(json.dumps(response_data), content_type="application/json"

采纳自。

谢谢,这真的很有用。