2009-06-17 6 views

Répondre

5

Oui, vous devriez être en mesure de le faire:

from django.contrib.contenttypes import generic 
class Post(models.Model): 
    ... 
    comments = generic.GenericRelation(Comments) 

par les docs Django sur reverse generic relations

+0

Dans Django 1.3, je devais utiliser les éléments suivants: '= commentaires generic.GenericRelation (Commentaires, object_id_field = 'object_pk')'. Apparemment 'BaseCommentAbstractModel' utilise ce qui est maintenant un nom non-standard pour son' object_id_field'? – tehfink

1

je suis venu avec une autre façon de le faire (pourquoi? Parce que je n'étais pas au courant d'une autre façon de faire ce temps). Il repose sur l'existence d'une classe de modèle abstraite à partir de laquelle tous les modèles du système sont dérivés. Le modèle abstrait lui-même a une méthode, comments, définie qui, lorsqu'elle est appelée, renvoie un QuerySet de tous les objets de commentaire associés à l'objet concret correspondant. Je mis en œuvre ainsi:

from django.db import models 
from django.contrib.contenttypes.models import ContentType 
from django.contrib.comments.models import Comment 

class AbstractModel(models.Model): 

    def comments(self): 
     """Return all comment objects for the instance.""" 
     ct = ContentType.objects.get(model=self.__class__.__name__) 
     return Comment.objects.filter(content_type=ct, 
            object_pk=self.id) 

    class Meta: 
     abstract = True