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:大功告成,访问路由,展示

 

posted @   十一的杂文录  阅读(2242)  评论(2编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示