【问题标题】:Django - displaying each individual user's comment count on a post_detail templateDjango - 在 post_detail 模板上显示每个用户的评论计数
【发布时间】:2017-09-04 21:27:55
【问题描述】:

我设置了我的 cmets,用户可以在其中查看博客文章并将这些评论显示在 post_detail.html 模板中。我想在他们的 cmets 旁边(在任何帖子中)显示每个用户的 cmets 总数。

例如,我希望它为每个用户说user 1: 4 comments,依此类推。如果user 1 在 4 个不同的帖子上留下了 4 个 cmets,则所有 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,这可行,但它不是动态的。我正在尝试检索留下评论的用户。

【问题讨论】:

  • 查看以下内容以获取外键Link的计数
  • 我看过了,我不明白如何将其应用于我的情况。我仍处于学习 django 和 python 的初级阶段,您能否提供更多信息让我继续学习?

标签: python django django-models django-templates


【解决方案1】:

试试:

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

您需要从您的urls 调用user_rating_count 函数。

【讨论】:

  • 感谢您的意见。不幸的是,我似乎无法弄清楚你的代码。它给了我一个错误。从那以后我做了一些事情并遇到了这个障碍:stackoverflow.com/questions/46065177/… 但我仍然卡住了。
猜你喜欢
  • 2017-01-26
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多