html与django实现多级数据联动

html与django实现多级数据联动

在这里插入图片描述

1、流程

1、进入页面后先获取年级数据
2、选择年级后获取院级数据
3、选择院级后获取层次数据
4、选择层次数据后获取专业数据

2、html代码

<p style="margin-top: 10px;">
                    <label>年级</label>
                    <select id="grade" class="form-control" required="required"
                            name="grade"
                            style="width: 100px; margin-left: 7px">
                        <option id="name" value="">--请选择年级--</option>
                    </select>
                </p>

                <p style="margin-top: 10px;">
                    <label>院级</label>
                    <select id="school" class="form-control" required="required"
                            name="school"
                            style="width: 100px; margin-left: 7px">
                        <option id="name" value="">--请选择院级--</option>
                    </select>
                </p>

                <p style="margin-top: 10px;">
                    <label>层次</label>
                    <select id="level" class="form-control" required="required"
                            name="level"
                            style="width: 100px; margin-left: 7px">
                        <option id="name" value="">--请选择层次--</option>
                    </select>
                </p>

                <p style="margin-top: 10px;">
                    <label>专业</label>
                    <select id="major" class="form-control" required="required"
                            name="major"
                            style="width: 100px; margin-left: 7px">
                        <option id="name" value="">--请选择专业--</option>
                    </select>
                </p>

js代码:

<script type="text/javascript">
    $(document).ready(function () {
        // 第一层 年级
        $.ajax({
            url: '{{ cascade_data }}',
            type: 'POST',
            data: {
                code: 'grade'
            },
            success: function (res) {
                var data = res['info'];
                for (var i = 0; i < data.length; i++) {
                    $('#grade').append("<option value='" + data[i] + "'>" + data[i] + "</option>")
                }
            },
            error: function (err) {
            }
        });

        // 第二层 院级
        document.getElementById('grade').onchange = function () {
            $.ajax({
                url: '{{ cascade_data }}',
                type: 'POST',
                data: {
                    code: 'school',
                    grade_value: this.value,
                },
                success: function (res) {
                    var data = res['info'];
                    for (var i = 0; i < data.length; i++) {
                        $('#school').append("<option value='" + data[i] + "'>" + data[i] + "</option>")
                    }
                },
                error: function (err) {
                }
            });
        }

        // 第三层 层次
        document.getElementById('school').onchange = function () {
            $.ajax({
                url: '{{ cascade_data }}',
                type: 'POST',
                data: {
                    code: 'level',
                    grade_value: document.getElementById('grade').value,
                    school_value: this.value,
                },
                success: function (res) {
                    var data = res['info'];
                    for (var i = 0; i < data.length; i++) {
                        $('#level').append("<option value='" + data[i] + "'>" + data[i] + "</option>")
                    }
                },
                error: function (err) {
                }
            });
        }

        // 第四层 专业
        document.getElementById('level').onchange = function () {
            $.ajax({
                url: '{{ cascade_data }}',
                type: 'POST',
                data: {
                    code: 'major',
                    grade_value: document.getElementById('grade').value,
                    school_value: document.getElementById('school').value,
                    level_value: this.value,
                },
                success: function (res) {
                    var data = res['info'];
                    for (var i = 0; i < data.length; i++) {
                        $('#major').append("<option value='" + data[i] + "'>" + data[i] + "</option>")
                    }
                },
                error: function (err) {
                }
            });
        }

        // 第五层
        document.getElementById('major').onchange = function () {
            $.ajax({
                url: '{{ cascade_data }}',
                type: 'POST',
                data: {
                    code: 'other',
                    grade_value: document.getElementById('grade').value,
                    school_value: document.getElementById('school').value,
                    level_value: document.getElementById('level').value,
                    major_value: this.value,
                },
                success: function (res) {
                    document.getElementById('price').value = res['price']
                    document.getElementById('details').value = res['details']
                    document.getElementById('remark').value = res['remark']
                },
                error: function (err) {
                }
            });
        }


    })
</script>

3、djanog代码

urls.py:

from django.urls import path

from textbook import views

urlpatterns = [
    
    path("cascade_data/", views.cascade_data, name="cascade_data"),  # 教材级联数据
]

views.py代码:

def cascade_data(request, *args, **kwargs):
    # 获取级联数据
    code = request.POST.get('code', '')
    grade_value = request.POST.get('grade_value', '')
    school_value = request.POST.get('school_value', '')
    level_value = request.POST.get('level_value', '')
    major_value = request.POST.get('major_value', '')
    # 获取院级数据
    if code == 'grade':
        data = []
        for course in Course.objects.all().values('grade'):
            if course['grade'] not in data:
                data.append(course['grade'])
        return JsonResponse(data={'info': data})
    # 获取年级数据
    if code == 'school':
        data = []
        for course in Course.objects.filter(grade=grade_value).values('school'):
            if course['school'] not in data:
                data.append(course['school'])
        return JsonResponse(data={'info': data})
    # 获取层级数据
    if code == 'level':
        data = []
        for course in Course.objects.filter(grade=grade_value, school=school_value).values('level'):
            if course['level'] not in data:
                data.append(course['level'])
        return JsonResponse(data={'info': data})
    # 获取专业数据
    if code == 'major':
        data = []
        for course in Course.objects.filter(grade=grade_value, school=school_value, level=level_value).values('major'):
            data.append(course['major'])
        return JsonResponse(data={'info': data})
    # 获取其他数据
    if code == 'other':
        details = None
        price = None
        remark = None
        for course in Course.objects.filter(grade=grade_value, school=school_value, level=level_value,
                                            major=major_value):
            details = course.details
            price = course.price
            remark = course.remark
        return JsonResponse(data={'details': details, 'price': price, 'remark': remark, })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/130393.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARM 基础学习记录 / 异常与GIC介绍

GIC概念 念课本&#xff08;以下内容都是针对"通用中断控制器&#xff08;GIC&#xff09;"而言&#xff0c;直接摘录的&#xff0c;有的地方可能不符人类的理解方式&#xff09;&#xff1a; 通用中断控制器&#xff08;GIC&#xff09;架构提供了严格的规范&…

常见排序算法之插入排序类

插入排序&#xff0c;是一种简单直观的排序算法&#xff0c;工作原理是将一个记录插入到已经排好序的有序表中&#xff0c;从而形成一个新的、记录数增1的有序表。在实现过程中&#xff0c;它使用双层循环&#xff0c;外层循环对除了第一个元素之外的所有元素&#xff0c;内层循…

RK3399平台开发系列讲解(内存篇)free 命令查看内存占用情况介绍

🚀返回专栏总目录 文章目录 一、free的使用二、free的内容📢free 指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 一、free的使用 -b  以 Byte 为单位显示内存使用情况。-k  以 KB 为单位显示内存使用情况。…

Clickhouse表引擎

前言&#xff1a; 有关Clickhouse的前置知识详见&#xff1a; 1.ClickHouse的安装启动_clickhouse后台启动_THE WHY的博客-CSDN博客 2.ClickHouse目录结构_clickhouse 目录结构-CSDN博客 Cickhouse创建表时必须指定表引擎 表引擎&#xff08;即表的类型&#xff09;决定了&…

Java语言基础(上)

Java 语言的特点 面对对象&#xff1a;Java 中所有的数据和方法都封装在对象中跨平台性&#xff1a;Java 通过 Java 虚拟机&#xff0c;可以在不同的操作系统上运行相同的程序自动内存管理&#xff1a;Java 提供垃圾回收机制&#xff0c;不需要手动管理内存强类型语言&#xf…

矩阵的除法

B/A 如果矩阵A可逆&#xff0c;那么 证明&#xff1a; A/AB 如果矩阵A和B都可逆&#xff0c;那么 证明&#xff1a;

Ubuntu系统使用apt-get管理软件工具

记录一下使用Ubuntu系统的apt-get管理软件工具 先查看一下系统的版本&#xff0c;可以看到这里使用的是Ubuntu20.04版本&#xff0c;版本代号focal rootmyw:~# uname -a Linux myw 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/L…

GEE:基于 Landsat 计算的 kNDVI 应用 APP

作者:CSDN @ _养乐多_ 本文记录了在Google Earth Engine(GEE)平台中,使用 Landsat 遥感数据计算 kNDVI 的应用 APP 链接,并介绍该 APP 的使用方法和步骤。该APP可以为用户展示 NDVI 和 kNDVI 的遥感影像,进行对比分析。该 APP 在 Google Earth Engine(GEE)平台中实现。…

2022年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 有n个按名称排序的商品,使用对分查找法搜索任何一商品,最多查找次数为5次,则n的值可能为?()(2分) A.5 B.15 C.30 D.35 答案:C 答案解析:对分查找最多查找次数m与个数之间n的…

@JSONField或@JsonProperty注解使用

一、需求 使用JSONField或JsonProperty注解&#xff0c;来解决bean与json字段不一致问题&#xff0c;或者字段定义不符合前端所需要的标准&#xff0c;最近在项目中发现实体类属性中&#xff0c;同时使用了JSONField和JsonProperty注解&#xff0c;用于重新声明属性key。有时候…

百度王颖:百度文库以AI创作能力突破语言边界,促进思想碰撞和文化融通

1月9日&#xff0c;2023年世界互联网大会乌镇峰会“网络传播与文明交流互鉴论坛”召开。百度副总裁、互娱和垂类平台负责人王颖出席并发表“以技术搭建跨文化交流桥梁”主题演讲。她表示&#xff0c;在大模型的加持下&#xff0c;百度各个产品都在重构&#xff0c;通过技术助力…

收集不同富文本编辑器的使用(vue3版本)

文章目录 一、ueditor&#xff08;百度富文本编辑器&#xff09;安装使用并二次封装组件 二、KindEditor下载文件新建组件及使用 一、ueditor&#xff08;百度富文本编辑器&#xff09; 参考 ueditor 和 vue-ueditor-wrap 这里直接使用 封装好的vue组件 vue-ueditor-wrap vue3版…

深度学习 python opencv 动物识别与检测 计算机竞赛

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

海康Visionmaster-通讯管理:ModBus 通信发送非整型 数据的方法

Modbus 通信发送数据只能为 Int 类型&#xff0c;如下图所示&#xff1a; 可以发送 Int 和 Float 数据&#xff0c;如下图所示 通信设备配置如下&#xff1a; 发送事件配置如下&#xff1a; 通信管理界面显示有问题&#xff0c;显示为 Int 类型存在一定误导&#xff1b;可以…

Powerpoint不小心被覆盖?PPT误删文件如何恢复?

PowerPoint不小心删除了&#xff0c;这可能是众多学生和工作人员最头痛的事情了。PPT被覆盖或误删可能意味着几个小时的努力付之东流。那么PPT覆盖的文档要如何救回来呢&#xff1f;小编将会在本篇文章中为大家分享几个解决方案&#xff0c;使PPT文档覆盖还原操作成为可能&…

iOS代码混淆和加固技术详解

目录 摘要&#xff1a; 本文介绍了iOS开发中常用的代码混淆和加固技术&#xff0c;包括数据加密、应用加壳和代码混淆。其中&#xff0c;重点讨论了代码混淆的实现方法和注意事项&#xff0c;并推荐了一些相关的工具和库。 引言 代码混淆和加固 数据加密 应用加壳 代码混…

建设大型综合运维平台,对接集成多厂商网管系统

当前&#xff0c;云计算、大数据、人工智能等IT技术迅猛发展&#xff0c;企业的信息化步入了一个崭新的时代&#xff0c;企业规模不断壮大&#xff0c;业务不断拓展&#xff0c;企业信息化依赖的网络结构和IT技术越来越复杂。因建设时期等原因&#xff0c;企业网络中分布着不同…

家庭安全计划 挑战赛| 溺水预防

溺水预防 从了解到行动 家庭安全计划 | 少年急救官 地震避险逃生该怎么做&#xff1f; 起火了该如何应对&#xff1f; 哪些行为容易导致溺水&#xff1f; 家庭风险隐患有哪些&#xff1f; 家庭逃生演练四步骤你会吗&#xff1f; 国际救助儿童会&#xff08;英国&#xff…

2022最新版-李宏毅机器学习深度学习课程-P50 BERT的预训练和微调

模型输入无标签文本&#xff08;Text without annotation&#xff09;&#xff0c;通过消耗大量计算资源预训练&#xff08;Pre-train&#xff09;得到一个可以读懂文本的模型&#xff0c;在遇到有监督的任务是微调&#xff08;Fine-tune&#xff09;即可。 最具代表性是BERT&…

百度智能云正式上线Python SDK版本并全面开源!

文章目录 1. SDK的优势2. 千帆SDK&#xff1a;快速落地LLM应用3. 如何快速上手千帆SDK3.1 SDK快速启动3.2 SDK进阶指引3.3 通过Langchain接入千帆SDK 4. 开源社区 百度智能云千帆大模型平台再次升级&#xff01;在原有API基础上&#xff0c;百度智能云正式上线Python SDK&#…