2014-01-09 1 views
0

외래 키와 관련된 A 및 B라는 다음 모델 클래스가 있습니다. 따라서 B는 외부 키와 관련하여 A로 되돌아가는 링크를 갖습니다. 이제는 A를 반복하면서 잠재적으로 수많은 B 클래스를 추출하려고합니다. 이제 여기에 비틀기가 있습니다. 템플릿에서 이들을 표시하는 가장 현명한 방법은 무엇입니까? 내가 즉,Django 템플릿에 여러 관련 클래스 표시

alla = A.objects.all().order_by("-date") 

를 쿼리 세트를 얻을로 지금

class A(models.Model): 
    field1 = models.CharField(max_length=30) 


class B(models.Model): 
    aAID = models.ForeignKey(A) 
    field1 = models.CharField(max_length=30) 

은, 점점 내가 다음 알라를 통해 템플릿 및 루프에 렌더링을 통해이를 보낼 수있는 매우 간단하지만 내가 어떻게 할 수 이 템플릿은 또한 발견 된 B 클래스를 반복 처리합니다.

답변

2

A 클래스는 관련 B 개체를 반환하는 b_set 특성을가집니다.

당신은 당신의 템플릿에서이 속성을 사용할 수 있습니다

{% for a in alla %} 
    {{ a }} 
    {% for b in a.b_set.all %} 
    {{ b }} 
    {% endfor %} 
{% endfor %} 

이 위대한 사람 (그리고 Django documentation) 인용하자면 : 당신이 (모델의 관계를 정의 할 때

을 즉, 외래 키, OneToOneField 또는 ManyToManyField)를 사용하면 해당 모델의 인스턴스에 이 관련 개체에 액세스하기위한 편리한 API가됩니다. 의 관계를 정의 모델에 관련된 모델에서 링크 -

는 [...]

장고 또한 관계의 "다른"측에 대한 API의 접근을 생성한다. b.entry_set.all() : 예를 들어, Blog 대상 (B)은 entry_set 속성을 통해 모든 관련 Entry 개체 목록에 대한 액세스를 갖는다.

3

는이에 대해 자동으로 생성 된 관리자 a.b_set를 사용할 수 있습니다

>>> for a in A.objects.all(): 
>>>  for b in a.b_set.all(): 
>>>   print b.field1 

또는 템플릿에

:
{% for a in alla %} 
    {% for b in a.b_set.all %} 
     {{ b.field1 }} 
    {% endfor %} 
{% endfor %} 

는 또한 the official documentation를 보라.

2

할 수 있습니다 단지 템플릿의 다른 속성과 같은 루프 관련 회원, 당신은 같은 것을 할 수 있습니다 :

<table> 
{% for a in alla %} 
    {% for b in alla.b_set.all %} 
     <tr><td>{{a}}</td><td>{{b}}</td></tr> 
    {% endfor %} 
{% endfor %} 
</table> 

그것의 단지 예를. 템플릿에서 원하는 것을 할 수 있습니다.

관련 문제