最近在使用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