Django Admin的交互式图表和图形化报表
Django Admin自带的交互式图表和图形化报表功能非常强大,可以让开发者方便地通过数据可视化来进行数据分析和决策。以下是使用Django Admin实现交互式图表和图形化报表的详细步骤。
首先,需要在Django Admin中安装以下依赖:
pip install django-chartjs pip install pandas
然后,在需要生成图表或报表的模型类中定义一个方法,用于查询和统计数据。例如,我们可以创建一个名为“sales_report”的方法,用于统计指定日期范围内的销售额数据。
from datetime import timedelta from django.utils import timezone from django.db.models import Sum from .models import Sales class SalesAdmin(admin.ModelAdmin): def sales_report(self, obj): # 指定日期范围为过去7天 start_date = timezone.now() - timedelta(days=7) end_date = timezone.now() # 查询指定日期范围内的销售额 sales_data = Sales.objects.filter(sale_date__range=(start_date, end_date)) total_sales = sales_data.aggregate(Sum('amount'))['amount__sum'] # 返回统计数据作为字典对象 return {'start_date': start_date, 'end_date': end_date, 'total_sales': total_sales} # 修改Admin界面的显示 sales_report.short_description = 'Sales Report' sales_report.allow_tags = True # 将销售额数据添加到list_display中 list_display = ['id', 'customer', 'product', 'amount', 'sales_report']
接下来,需要在Admin配置文件中定义一个新的方法,用于渲染图表或报表。例如,我们可以创建一个名为“sales_chart”的方法,用于显示销售额数据的饼图。
from django.shortcuts import render from django.http import HttpResponse from chartjs.views.lines import BaseLineChartView from django_pandas.io import read_frame from .models import Sales class SalesChartView(BaseLineChartView): def get_labels(self): labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] return labels def get_providers(self): providers = ["Sales"] return providers def get_data(self): start_date = timezone.now() - timedelta(days=7) sales_data = Sales.objects.filter(sale_date__range=(start_date, timezone.now())) df = read_frame(sales_data) data = [] data.append(df['amount'].tolist()) return data def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['title'] = 'Sales Report' return context
最后,在Admin配置文件中定义一个URL,用于展示图表或报表。例如,我们可以创建一个URL为“sales_chart”的视图,并将其关联到sales_chart方法上。
from django.urls import path from .views import SalesChartView urlpatterns = [ path('sales-chart/', SalesChartView.as_view(), name='sales_chart'), ]
现在,我们可以在Django Admin中访问“sales_chart”页面,并通过饼图来展示数据。
{% extends "admin/base_site.html" %} {% load static %} {% block extrahead %} {{ block.super }} {% load chartjs %} {% endblock %} {% block content %} {{ chartjs_css }} {{ chartjs_js }} <canvas id="line_chart" height="100"></canvas> <script> {% line_chart sales_chart scalable=True %} </script> {% endblock %}
通过以上步骤,我们可以方便地在Django Admin中创建交互式图表和图形化报表,来进行数据分析和决策。例如,我们可以使用以下命令来带入我们之前的例子中的数据和字符串作为范例:
from datetime import date, timedelta from django.utils import timezone from decimal import Decimal from .models import Sales class SalesAdmin(admin.ModelAdmin): def sales_report(self, obj): start_date = timezone.now() - timedelta(days=7) end_date = timezone.now() sales_data = Sales.objects.filter(sale_date__range=(start_date, end_date)) total_sales = sales_data.aggregate(Sum('amount'))['amount__sum'] # 使用字符串作为范例 example_string = 'pidancode.com' return {'start_date': start_date, 'end_date': end_date, 'total_sales': total_sales, 'example_string': example_string} sales_report.short_description = 'Sales Report' sales_report.allow_tags = True list_display = ['id', 'customer', 'product', 'amount', 'sales_report']
相关文章