zoukankan      html  css  js  c++  java
  • 统计插件,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="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            }
  • 相关阅读:
    【LeetCode】205. Isomorphic Strings
    Syscall param open(filename) points to unaddressable byte(s)
    五种主要多核并行编程方法分析与比较
    计算机时间复杂度和空间复杂度
    CUDA学习笔记(二)【转】
    CUDA学习笔记(一)【转】
    CUDA Thread Indexing
    Intel MKL函数,如何得到相同的计算结果?【转】
    CUDA编程
    GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
  • 原文地址:https://www.cnblogs.com/shanghongyun/p/9988151.html
Copyright © 2011-2022 走看看