Count()方法如何在此代码中工作?

时间:2019-07-19 17:28:38

标签: django python-3.x count

我从书中获得了这段代码,我目前正在研究,不知道如何工作,但是它是有效的。如果有人可以向我解释Count('tags')如何知道它应该只计算与帖子相关的标签,我会很高兴。

def post_detail(request, year, day, month, post):
    post = get_object_or_404(Post, slug = post, publish__year = year, publish__month = month, publish__day = day)
    comments = post.comments.filter(active=True)

    if request.method == 'POST':
        comment_form = CommentForm(data=request.POST)
        if comment_form.is_valid():
            new_comment = comment_form.save(commit=False)
            new_comment.post = post
            new_comment.save()
    else:
        comment_form = CommentForm()

    post_tags_pks = post.tags.values_list('pk', flat=True)
    similar_posts = Post.published.filter(tags__in=post_tags_pks).exclude(pk=post.pk)
    similar_posts = similar_posts.annotate(same_tags=Count('tags')).order_by('-same_tags','-publish')[:4]


    return render(request, 'blog/post/detail.html', {'post': post, 'comments': comments, 'comment_form': comment_form,'similar_posts': similar_posts})

1 个答案:

答案 0 :(得分:1)

Count() 中的Django聚合方法 django.db.models 注释以计算通过ForeignKey与之相关的子代数。

您可以查看 Django Aggregation

下面的代码将通过注释来给出与各个帖子相关的所有标签的数量。

similar_posts = similar_posts.annotate(same_tags=Count('tags')).order_by('-same_tags','-publish')[:4]

您可以使用存储计数的变量访问任何帖子的计数。

在您的情况下,以下代码将为第一篇文章的标签计数。

similar_posts[0].same_tags