2017-09-04 52 views
0

我有我的评论,用户可以在其中查看博客帖子,并让这些评论显示在post_detail.html模板中。我想显示每位用户的评论总数,旁边的评论(任何文章)。Django - 在post_detail模板上显示每个用户的评论数

例如,我希望对每个用户说user 1: 4 comments等等。如果user 1已在4个不同的帖子上留下4条评论,则所有4个帖子应显示user 1: 4 comments

models.py

class UserProfile(models.Model): 
    user = models.OneToOneField(User, related_name='profile') 

... 

def user_rating_count(self): 
    user_ratings = Comment.objects.filter(user=2).count() 
    return user_ratings 

... 

class Comment(models.Model): 
    post = models.ForeignKey(Post, related_name="comments") 
    user = models.ForeignKey(User, related_name="usernamee") 
    ... 
    review_count = models.IntegerField(default=0) 

views.py

@login_required 
def add_comment(request, slug): 
    post = get_object_or_404(Post, slug=slug) 

    if request.method == 'POST': 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.post = post # Makes the post linked to the comment 
      comment.user = request.user # Makes the user linked to the comment 
      comment.email = request.user.email 
      comment.picture = request.user.profile.profile_image_url() 
      comment.review_count = request.user.profile.user_rating_count() 
      comment.save() 

      return redirect('blog:post_detail', slug=post.slug) 
    else: 
     form = CommentForm() 

    template = "blog/post/add_comment.html" 
    context = {'form': form} 
    return render(request, template, context) 

post_detail.html

... 
{% for comment in post.comments.all %} 
    {{ comment.review_count }} 
{% endfor %} 
... 

我一直在努力通过我的模型的user_rating_count方法完成此操作,但我只能手动选择user=1user=2,该方法可行,但它不是动态的。我试图找回留下评论的用户。

+0

请参阅以下获取外键[链接]计数(https://stackoverflow.com/questions/46027863/getting-model-filters-to-show-count-of-active-values/46028022#46028022) – deaspo

+0

我看过它,我不明白如何将这个应用到我的情况。我仍然在初学者阶段学习django&python,请给我更多的信息让我继续下去? – dmandres

回答

0

尝试:

from django.db.models import Count 

def user_rating_count(request): 
    users = User.objects.all().annotate(ratings=Count('comment')) 
    context={'users':users} 
    render(request, 'file.html', context) 

现在HTML

{% for user in users %} 
    <b>{{user.username}}</b>:{{user.ratings}} 
{% endfor %} 

这将显示,username : total_comments为每一位用户。

您需要拨打user_rating_count函数从您的urls

希望它有帮助!

+0

感谢您的意见。不幸的是,我似乎无法弄清楚你的代码。它给了我一个错误。我已经做了几件事情,并已走到这个路障:https://stackoverflow.com/questions/46065177/django-forms-how-to-update-user-data-from-previous-comment-when-user -posts-an,但我仍然卡住。 – dmandres

相关问题