Django检索用户的所有评论

问题描述:

我使用的是django-profiles和django.contrib.comments,我试图在其个人资料中显示特定用户的所有评论。Django检索用户的所有评论

这是使用django-profiles的默认profile_detail视图。

我已经试过这两种方法并没有被返回的任何对象(尽管确实存在匹配该查询对象):

{% for comment in profile.user.comment_set.all %} 

{% for comment in profile.user.user_comments.all %} 

在为django.contrib中的源代码.comments,Comment模型中用户的外键具有以下相关名称:

user = models.ForeignKey(User, verbose_name=_('user'), 
        blank=True, null=True, related_name="%(class)s_comments") 

个评论也有一个自定义的经理:

# Manager 
    objects = CommentManager() 

其定义为:

class CommentManager(models.Manager): 

    def in_moderation(self): 
     """ 
     QuerySet for all comments currently in the moderation queue. 
      """ 
     return self.get_query_set().filter(is_public=False, is_removed=False) 

    def for_model(self, model): 
     """ 
     QuerySet for all comments for a particular model (either an instance or 
     a class). 
     """ 
     ct = ContentType.objects.get_for_model(model) 
     qs = self.get_query_set().filter(content_type=ct) 
     if isinstance(model, models.Model): 
      qs = qs.filter(object_pk=force_unicode(model._get_pk_val())) 
     return qs 

原因造成的。所有的查询不返回任何自定义的经理吗?我正确访问反向关系吗?任何帮助,将不胜感激。

相关名称已定义,因此默认name_set将不起作用。 related_name的用途是覆盖默认的反向管理器名称。

user = models.ForeignKey(User, verbose_name=_('user'), 
       blank=True, null=True, related_name="%(class)s_comments") 

所以用这个:

user.comment_comments.all() 
+0

感谢。我使用了错误的类名(用户而不是评论)。其实它应该是:user.comment_comments.all()。最后的“s”应该被切换。 – 2011-03-13 22:14:55

+0

np!感谢您接收错字 – 2011-03-13 22:17:26