0

我试图将评论计数注释到模型的查询集。

我可以这样做,并且它可以工作:

entry_type 是一个内容类型对象。

popular_posts = Post.objects.all().annotate(\
        comment_count=Sum("id")).extra(select={
            'comment_count': """SELECT COUNT(*) FROM django_comments
                WHERE django_comments.object_pk = Blogger_post.id
                AND django_comments.content_type_id = %s"""
        }, select_params=(entry_type.id,)).order_by('-comment_count')

但是,当我尝试

popular_posts = Post.custom_manager.all()

#custom_manager
class PostManager(models.Manager):
    def get_query_set(self):
    return super(PostManager,self).get_query_set().all().annotate(\
            comment_count=Sum("id")).extra(select={
                'comment_count': """SELECT COUNT(*) FROM django_comments
                    WHERE django_comments.object_pk = Blogger_post.id
                    AND django_comments.content_type_id = %s"""
            }, select_params=(entry_type.id,)).order_by('-comment_count')

有一个comment_count,但它不是预期值。

我究竟做错了什么?

编辑:我仍然不知道这是什么问题,但这有效

class PostManager(models.Manager):
    def get_query_set(self):
    return super(PostManager,self).get_query_set().all().extra(select={
                'comment_count': """SELECT COUNT(*) FROM django_comments
                    WHERE django_comments.object_pk = Blogger_post.id
                    AND django_comments.content_type_id = %s"""
            }, select_params=(entry_type.id,)).order_by('-comment_count')
4

0 回答 0