使用Django自带Admin后台结合Echarts实现后台简单图表功能

最近在使用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 %}
导出成xls


{% endblock %}
效果预览:

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

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

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

参考:https://blog.csdn.net/weixin_42014939/article/details/89409665
参考:https://www.cnblogs.com/LyShark/p/12200823.html

Guess you like

Origin blog.csdn.net/sinat_26809255/article/details/121114904