2017-09-04 54 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

相關問題