2012-03-27 2 views
0

Dans le cas suivant view:MPTT - Comment puis-je transmettre des données supplémentaires pour chaque nœud au modèle?

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)) 

Comment passer comments_extra_data_list au modèle afin d'afficher les données de chaque noeud à arbre MPTT?

Répondre

3

Si vous avez ces modèles:

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

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

Vous pouvez simplement le faire dans votre modèle:

{% recursetree nodes %} 
    <h1>{{ node }}</h1> 
    {% for data in node.data_set.all %} 
     {{ data.something }} 
    {% endfor %} 
    ... 
{% endrecursetree %} 

C'est l'approche naïve. Il effectuera une requête de base de données (extraction des objets associés Data) pour chaque Thing.

Si vous utilisez django 1.4, vous devez précharger les objets de données dans votre point de vue, il ne fait pas tant de requêtes:

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

Comment as-vous sur? Si c'est ce que vous cherchiez, n'oubliez pas d'accepter la réponse. Ensuite, nous avons tous deux amélioré la réputation de SO :) – craigds

Questions connexes