2010-05-21 7 views
0

Ce sont mes modèles:requête efficace avec les relations génériques

class Comment(models.Model): 

    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField(_('object ID')) 
    content_object = generic.GenericForeignKey() 
    user = models.ForeignKey(User) 
    comment = models.TextField(_('comment')) 


class Post(models.Model): 

    title = models.CharField(_('name'), max_length=80)   
    creator = models.ForeignKey(User, related_name="created_posts") 
    created = models.DateTimeField(_('created'), default=datetime.now) 
    body = models.TextField(_('body'), null=True, blank=True) 

Maintenant, dans mon views.py je reçois un message avec ce indocations:

post = get_object_or_404(Post, id=id) 

A ce stade de ma views.py, Quelle est la requête la plus efficace (avec ORM) pour obtenir tous les commentaires de ce post?

Répondre

3

Vous devez définir comments = generic.GenericRelation(Comment) sur la publication, pour vous donner un accès facile à partir de Publier pour commenter. Une fois que vous avez fait cela, il est une simple relation descendante:

comments = post.comments.all() 

Notez que ce n'est pas vraiment une question d'efficacité. Obtenir tous les éléments liés via une relation générique descendante entraînera toujours au plus deux requêtes - une pour obtenir le ContentType pertinent, qui est automatiquement mis en cache lors de la première recherche, et une fois pour obtenir les éléments réels.

Si vous aviez demandé comment obtenir tous les commentaires pour plusieurs messages aussi efficacement que possible, je vous dirigerais vers my blog pour une bonne technique, mais puisque vous ne l'avez pas je ne le ferai pas parce que ce serait juste blog -whoring.

Questions connexes