统计插件,Highcharts,以及modelformset

.modelfromset组件

1.作用:用于批量处理多个表单

form表单对应的组件是formset

Modelform对应的组件是modelformset

 

2.引入

From django.forms.models import modelformset_factory

 

3.参数(没有默认值的)

Model=Studengstudyrecord      #对应的模型表

form=Studengstudyrecordmodelform           #模型表对应的modelform

Extra=0   #创建几个添加的表单,不用就的美好与0

 

4.代码:model_formset_cls=modelformset_factory(model=StudentStudyRecord,form=StudentStudyRecordModelForm,extra=0)

 

5.获取取queryset

queryset = StudentStudyRecord.objects.filter(classstudyrecord=class_study_record_id)

 

6.构建model formset

formset = model_formset_cls(queryset=queryset)

 

7.前端页面

 1 return render(request,"record_score.html",locals())
 2 
 3  
 4 
 5 <form method="post" action="">
 6     {% csrf_token %}
 7     {{ formset.management_form }}
 8 #一定要在form表单中添加{{ formset.management_form }}
 9     <table class="table table-bordered">
10         <thead>
11         <tr>
12             <th>姓名</th>
13             <th>考勤</th>
14             <th>作业成绩</th>
15             <th>作业评语</th>
16         </tr>
17         </thead>
18         <tbody>
19         {% for form in formset %}  #每一个学生记录对象
20             <tr>
21                 {{ form.id }}
22                 <td>{{ form.instance.student }}</td>  #对某一个字段,不渲染select标签
23                 <td>{{ form.instance.get_record_display }} </td>
24                 <td>{{ form.score }} </td>
25                 <td>{{ form.homework_note }}</td>
26             </tr>
27         {% endfor %}
28         </tbody>
29     </table>
30     <input type="submit" value="保存">
31 </form>

8.提交之后的处理

 1 def post(self, request,class_study_record_id):
 2     model_formset_cls = modelformset_factory(model=StudentStudyRecord, form=StudentStudyRecordModelForm, extra=0)
 3     queryset = StudentStudyRecord.objects.filter(classstudyrecord=class_study_record_id)
 4     print("request.POST",request.POST)
 5     formset=model_formset_cls(request.POST)
 6     if formset.is_valid():
 7         formset.save()
 8 
 9     print(formset.errors)
10 
11     return redirect(request.path)

二. 销售额知识点

1.request.GET.get(“date”,today)

获取date,如果date取不到用today

 

2.datetime模块

Datetime.datetime 以年月日时分秒的格式获取时间

Datetime.date 以年月日的格式获取时间

Datetime.time 以时分秒的格式获取时间

Datetime.timedelta 可以获取时间差

:
mounth = datetime.datetime.now().date() - datetime.timedelta(weeks=4)

Timedelta的参数:

Days:

seconds:

minutes:分钟

hours:小时

weeks:

 

3.统计插件

(1) Highcharts

在产品中心下载,下载的文件中有大量无用的实例,其中的code文件才是核心文件

引用时,引用的是code文件中的highchart.js

图标所放的位置用插件中给出的占位

1 <div id="container" style="width:400px;height:400px"></div>

核心代码放在script

 1 <script>
 2     var chart = Highcharts.chart('container', {
 3         chart: {
 4             type: 'column'
 5         },
 6         title: {
 7             text: '成单数'
 8         },
 9         xAxis: {
10             type: 'category',
11             labels: {
12                 rotation: -45  // 设置轴标签旋转角度
13             }
14         },
15         yAxis: {
16             min: 0,
17             title: {
18                 text: '成单个数'
19             }
20         },
21         legend: {
22             enabled: false
23         },
24         tooltip: {
25             pointFormat: '成单数: <b>{point.y} 个</b>'
26         },
27         series: [{
28             name: '总人口',
29             data: [[1],[2],[3]],
30             dataLabels: {
31                 enabled: true,
32                 rotation: -90,
33                 color: '#FFFFFF',
34                 align: 'right',
35                 format: '{point.y:.1f}', // :.1f 为保留 1 位小数
36                 y: 10
37             }
38         }]
39     });
40 </script>

注意:插件对数据的格式要求严格,一定要将数据转换成插件所需要的格式

(2)Echarts

原理同highchart

4.将四个视图函数合成一个视图函数(利用字典做条件区分)

1 condition={
2     "today":[{"pay_date__gte":now},{"pay_date__lte":now},{"customers__pay_date__gte":now},{"customers__pay_date__lte":now}],
3     "yesterday":[{"pay_date__gte":now-yesterday},{"pay_date__lte":now-yesterday},{"customers__pay_date__gte":now-yesterday},{"customers__pay_date__lte":now-yesterday}],
4     "week":[{"pay_date__gte":now-week},{"pay_date__lte":now},{"customers__pay_date__gte":now-week},{"customers__pay_date__lte":now}],
5     "mounth":[{"pay_date__gte":now-mounth},{"pay_date__lte":now},{"customers__pay_date__gte":now-mounth},{"customers__pay_date__lte":now}],
6            }

 

posted @ 2018-11-20 12:07  ★行者尚★  阅读(202)  评论(0编辑  收藏  举报