我正在为应用程序设置webservices,我有以下模型:
class Parent(models.Model):
...
class Child(models.Model):
parent = models.ForeignKey(Course)
...
关系是一对多(1个父母,多个孩子) 现在,我想获取具有其特定Child的所有Parent对象,并将其作为JSON请求发送。是否有可能这样做而不必先得到所有" Childs"并迭代他们寻找与特定父母相关的? 我认为对于真正的大型数据库,以及" Childs"不会在其他"父母"
中重复非常感谢
答案 0 :(得分:11)
Django中的每个关系都会自动将其反向关系添加到模型中。如果ForeignKey
或ManyToManyField
该关系包含多个对象。在这种情况下,默认属性名称设置为<model>_set
,因此在这种情况下child_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()
在following relations backwards和how are backward relationships possible的文档中阅读更多内容。
答案 1 :(得分:2)
为什么需要迭代?即使Django没有为您提供特殊的向后语法,您也可以这样做:
Child.objects.filter(parent=my_parent)
但是作为一个粗略的谷歌,你的问题的标题会显示,有一个特殊的后向关系语法:
my_parent.child_set.all()
答案 2 :(得分:0)
是的,在django中你可以使用:
parentInstance.child_set.all()
其中parentInstance
是Parent
数据库中的一个特定父级。这将以有效的方式返回与其关联的所有Child对象。要使它成为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"
从here采用。