• django ORM 按月分组统计


    一、搭建环境,准备数据

    1.1:新建项目

    django-admin startproject Test

    1.2:新建app

    python manage.py startapp app

    1.3:设置 settings.py 

    # settings.py
    
    
    # 允许访问的ip地址
    ALLOWED_HOSTS = ['*']
    
    # 把app添加到 INSTALLED_APPS 中
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app',
    ]
    
    # 配置静态文件存放地址,然后在对应位置新建文件夹,由于我的django版本是3.x,所以路径是这种写法
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [BASE_DIR / 'templates'],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]

    1.4:创建数据库模型,由于只是示例,所以简单点

    # models.py
    
    from django.db import models
    
    # Create your models here.
    class AppModel(models.Model):
        name = models.CharField(max_length=20)
        date = models.DateField()
    
        def __str__(self):
            return self.name

    1.5:因为要添加数据,感觉用admin后台很方便,所以就配置下admin

    # admin.py
    
    from django.contrib import admin
    from app.models import AppModel
    
    # Register your models here.
    
    @admin.register(AppModel)
    class AppAdmin(admin.ModelAdmin):
    list_display = ['name', 'date']
    
    

    1.6:迁移、生成数据表,创建管理员账户

    python manage.py makemigrations
    
    python manage.py migrate
    
    python manage.py createsuperuser

    1.7:运行项目,进入后台添加数据

    python manage.py runserver

    以下是我添加的数据,总共6条,1条2月,5条3月

    二、现在就是重点了,使用ORM按月分组,并统计每月的数量,然后以图表的形式展示出来(这样只是为了更直观)

    2.1:编辑 views.py 

    # views.py
    
    from django.shortcuts import render
    from django.views import View
    from django.db.models.functions import ExtractMonth
    from django.db.models import Count
    from app.models import AppModelfrom pyecharts.charts import Bar
    
    # Create your views here.
    
    class AppView(View):
        def get(self, request):
         # ORM 实现 按月分组进行统计 data
    = AppModel.objects.annotate(month=ExtractMonth('date')).values('month').annotate(num=Count('name')) # 图表展示 bar = Bar() bar.add_xaxis([f"{i['month']}月" for i in data]) bar.add_yaxis('每月离职人数统计表', [i['num'] for i in data]) bar.render('templates/render.html') return render(request, 'render.html')

    2.2:配置路由 Test/urls.py

    # urls.py
    
    from django.contrib import admin
    from django.urls import path
    from app import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', views.AppView.as_view()),
    ]

    2.3:大功告成,访问路由,展示

  • 相关阅读:
    JDK集合框架--LinkedList
    JDK集合框架--ArrayList
    JDK集合框架--综述
    JDK常用类解读--StringBuffer、StringBuilder
    JDK常用类解读--String
    【spring 注解驱动开发】扩展原理
    【spring 注解驱动开发】spring事务处理原理
    【spring 注解驱动开发】Spring AOP原理
    【spring 注解驱动开发】spring自动装配
    【spring 注解驱动开发】spring对象的生命周期
  • 原文地址:https://www.cnblogs.com/shiyixirui/p/14546514.html
Copyright © 2020-2023  润新知