Django backwards relation
我正在为应用程序设置WebServices,我有以下模型:
1 2 3 4 5 | class Parent(models.Model): ... class Child(models.Model): parent = models.ForeignKey(Course) ... |
这种关系是一对多(父母一,子女多)现在,我想获取所有父对象及其特定的子对象,并将其作为JSON请求发送。是否可以这样做,而不必首先获取所有的"子"并迭代它们来查找与特定父代相关的子代?我认为对于真正大的数据库来说,这是非常低效的,而且"孩子"不会在其他"家长"中重复出现。
非常感谢你
Django中的每个关系都会自动将其反向关系添加到模型中。在
1 2 | for child in parent.child_set.all(): do_something() |
还可以使用
1 2 3 4 5 | class Child(models.Model): parent = models.ForeignKey(Parent, related_name='children') for child in parent.children.filter(some_field=True): do_something() |
。
请阅读文档中有关向后跟踪关系以及向后关系如何可能的更多信息。
为什么需要迭代?即使Django没有为您提供特殊的向后语法,您也可以这样做:
1 | Child.objects.filter(parent=my_parent) |
但是,作为你问题标题的粗略谷歌,有一种特殊的向后关系语法:
1 | my_parent.child_set.all() |
号
是的,在Django你可以使用:
1 | parentInstance.child_set.all() |
其中
1 2 3 4 5 6 7 | 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" |
。
从这里被收养。