Django评论反向关系

时间:2009-06-17 15:47:11

标签: django django-comments

当使用django.contrib.comments时,无论如何都要将反向关系添加到有注释的模型中吗?

例如:

post = Post.objects.all()[0]
comments = post.comments.all()

2 个答案:

答案 0 :(得分:5)

是的,你应该可以这样做:

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

根据reverse generic relations

上的Django文档

答案 1 :(得分:1)

我提出了另一种方法来做到这一点(为什么?因为我不知道有任何其他方法可以做到这一点)。它依赖于一个抽象的模型类,从中派生出系统中的所有模型。抽象模型本身有一个方法comments,该方法在被调用时返回与相应具体对象关联的所有注释对象的QuerySet。我这样实现了它:

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