Django Admin管理后台详解6(转)--报表


最近在使用Django实现图表化功能时遇到了无法在后台生成图表的功能,在此记录下实现过程。

步骤如下:

1、在所要展示的类的model新建一个类,LZ的代码如下:

class ViewsByDayModel(ViewsByDay): # 父类为要展示的model类
    class Meta:
        proxy = True # 使用代理
        verbose_name = '每日浏览次数统计'
        verbose_name_plural = verbose_name


2、在admin.py里注册该类,重写changelist_view,并获取数据后台数据。

class ViewsByDayAdmin(ImportExportModelAdmin):
    list_filter = (
        'date',
    )
    change_list_template = 'admin/admin_test.html'
 
    def changelist_view(self, request, extra_context=None):
        response = super().changelist_view(
            request,
            extra_context=extra_context
        )
 
        try:
            qs = response.context_data['cl'].queryset
        except (AttributeError, KeyError):
            return response
 
        metrics = {
            'days': Sum('date'), # date是model累的字段
            'views_count': Sum('views_count'), # views_count是model累的字段
            'ip_count': Sum('ip_count'), # ip_count是model累的字段
 
        }
        response.context_data['date'] = list(
            qs
                .values('date')
                .annotate(**metrics)
        )
 
        return response


3、编写前台页面获取数据,加载echarts插件,做出图表。代码如下。

{% extends 'admin/change_list.html' %}
{% load staticfiles %}
{% block content_title %}
    
    
    
{% endblock %}
 
{% block result_list %}
    "{% url 'viewsCount:views_export' %}" style="font-weight: bold; font-size: 20px;">导出成xls
    
"mains" style="height:400px; width: 1000px;">
{% endblock %}


效果预览:

ps:页面中的倒叙日期,可以在

response.context_data['date'] = list(
    qs
        .values('date')
        .annotate(**metrics)
       
)

下添加语句 .order_by('date')实现正序输出。

原文链接:https://blog.csdn.net/weixin_42014939/article/details/89409665