0

次の場合view

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_listMPTTツリーの各ノードのデータを表示するためにテンプレートに渡すにはどうすればよいですか?

4

1 に答える 1

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 %}

それは素朴なアプローチです。ごとに1つのデータベースクエリ(関連Dataオブジェクトのフェッチ)を実行しますThing

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

于 2012-03-28T08:13:23.873 に答える