2012-03-27 48 views
0

鑑於以下viewMPTT - 如何將每個節點的額外數據傳遞給模板?

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對象)。

如果你使用Django 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 2012-03-28 13:28:10