2012-03-27 4 views
0

는 주어진 view 다음 템플릿에MPTT - 각 노드의 추가 데이터를 템플릿에 전달하려면 어떻게해야합니까?

def comments(request): 

    comments_list = Thing.objects.filter(thing_type=2) 
    #Thing model extends MPTTModel 
    comments_extra_data_list = Data.objects.filter(thing__in=comments_list) 
    #Data objects have data for each Thing 

    return render_to_response("comments.html", 
         {'nodes':comments_list}, 
         context_instance=RequestContext(request)) 

어떻게 통과 할 수 comments_extra_data_list을 MPTT 트리에서 각 노드에 대한 데이터를 표시하기 위해?

답변

3

당신은이 모델이있는 경우 :

class Thing(MPTTModel): 
    ... 
    thing_type = models.IntegerField(default=0) 

class Data(models.Model): 
    thing = models.ForeignKey(Thing, related_name="data_set") 

당신은 당신의 템플릿이 작업을 수행 할 수 있습니다

순진한 접근이다
{% recursetree nodes %} 
    <h1>{{ node }}</h1> 
    {% for data in node.data_set.all %} 
     {{ data.something }} 
    {% endfor %} 
    ... 
{% endrecursetree %} 

. 각 Thing에 대해 하나의 데이터베이스 쿼리 (관련된 Data 개체 가져 오기)를 수행합니다. 당신이 장고 1.4을 사용하는 경우

, 당신은 당신의보기에서 데이터 객체를 프리 페치해야한다, 그래서 많은 쿼리를 수행하지 않습니다

comments = Thing.objects.filter(thing_type=2) 
comments = comments.prefetch_related('data_set') 

https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related

+0

당신이 얻을 어땠어? 그것이 당신이 찾고있는 것이라면, 그 대답을 받아들이는 것을 잊지 마십시오. 그럼 우리 둘 다 개선 된 평판을 얻을 :) – craigds