2014-04-13 1 views
-1

나는 응용 프로그램에 대해 웹 서비스를 설정하고 난 다음 모델이 있습니다장고는 이전 버전과의 관계

class Parent(models.Model): 
    ... 
class Child(models.Model): 
    parent = models.ForeignKey(Course) 
    ... 

의 관계는 이제 많은 한 가지 (1 부모, 많은 아동) 입니다, 나는 모든을 좀하고 싶습니다 특정 Child가있는 부모 개체를 JSON 요청으로 보냅니다. 먼저 "차일 즈"를 모두 가져 와서 특정 부모와 관련된 것을 찾는 반복없이 그렇게 할 수 있습니까? 는 그게 정말 큰 데이터베이스 매우 비효율적 일 것이라고 생각 플러스는 "차일"

당신에게

답변

9

장고의 모든 관계는 모델에 자동으로 역 관계가 추가됩니다. 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 backwardshow are backward relationships possible에 대한 자세한 설명서를 읽으십시오.

+0

감사합니다. 정말 유용했습니다. – Alqueraf

1

왜 반복 할 필요가 대단히 감사합니다 다른 "부모"에 반복되지 않을 것이다? 장고 특별한 뒤로 구문을 제공하지 않았더라도, 당신은 항상이 작업을 수행 할 수 있습니다 : 당신의 질문의 제목에 대한 피상적 인 구글이 보여준 것처럼

Child.objects.filter(parent=my_parent) 

하지만

은 이전 버전과의 관계에 대한 특수 구문이 :

my_parent.child_set.all() 
0

네, 장고에서 사용할 수 :

parentInstance.child_set.all() 

parentInstanceParent 데이터베이스에서 하나의 특정 부모입니다. 그러면 모든 자식 객체가 효율적으로 반환됩니다.

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에서 채택 : 그것을 JSON 응답을하려면, 당신은 이런 식으로 뭔가를 시도 할 수 있습니다.