Djano-----博客数量统计

一、获得博客分类数量统计:

blog_types = Blogtype.objects.all()------>首先获得全部分类
>>> for i in blog_types:--------------->遍历单个分类
...     count = Blog.objects.filter(typename = i).count()------------>筛选分类
...     print(count)
...
33
2
1

1.方法一:

#添加博客分类数量:
    #1.获取所有的博客分类 得到每一个分类
    blog_types = Blogtype.objects.all()
    blog_count_list = []
    for blog_type in blog_types:
        #把blog_type_count属性添加给blog_type这个实例化,也就是给Blogtype多增加一个属性
        blog_type.blog_type_count = Blog.objects.filter(typename = blog_type).count()
        blog_count_list.append(blog_type)
    contenx = {}
    contenx['page_of_blogs'] =  page_of_blogs
    contenx['blogs'] = page_of_blogs.object_list#获取符合参数所有的文章
    # contenx['count'] = Blog.objects.all().count()
    contenx['blog_dates'] = Blog.objects.dates('create_time','month','DESC')
    contenx['range_page'] = range_page
    contenx['blogtypes'] = blog_count_list#获取所有的分类
    return contenx

2.方法二:使用annotate注释

annotate需要一个Count方法。需要导入,from django.db.models import Count

#Blogtype.objects.annotate(blog_type_count=Count('blog'))'blog'是关联Blogtype外键的Blog的小写

Count('')需要传入一个字段是Blog的小写 本质是一个sql查询

Blogtype.objects.annotate(Count('bog'))

 二、获取日期的数量

blog_dates = Blog.objects.dates('create_time','month','DESC')
    blog_date_count_list = {}
    for blog_list_date in blog_dates:
        blog_date_count=Blog.objects.filter(create_time__year = blog_list_date.year,
                            create_time__month = blog_list_date.month).count()
        blog_date_count_list[blog_list_date] = blog_date_count
blog_date_count_list[blog_list_date] = blog_date_count构造一个字典:日期值为:key_words 数量值为:value
字典的使用:
{% for blog_date,blog_count in blog_dates.items %}
                                    <li>
                                    <a href="{%url 'blog_with_date' blog_date.year blog_date.month%}">{{blog_date|date:"Y年m月"}} ({{blog_count}})
                                    </a>
                                    </li>
                                {%empty%}
                                暂无分类
                                {% endfor %}

 三、Count 统计函数的使用

 from django.db.models import Count
>>> dr = Blog.objects.dates('create_time','month','DESC')
>>> dr.annotate(blog_count =Count( 'create_time'))
<QuerySet [datetime.date(2018, 2, 1), 36]>
>>>

 

 
posted @ 2018-02-06 16:16  jeep-鹏  阅读(201)  评论(0编辑  收藏  举报