当使用django.contrib.comments时,无论如何都要将反向关系添加到有注释的模型中吗?
例如:
post = Post.objects.all()[0]
comments = post.comments.all()
答案 0 :(得分:5)
是的,你应该可以这样做:
from django.contrib.contenttypes import generic
class Post(models.Model):
...
comments = generic.GenericRelation(Comments)
上的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