Django学习11 -- Admin页面级联选择

系统用的越多问题也就越多,用户提出的要求也越多,问题和要求积攒多了总有撑不住的时候,只得重新筛选问题进行维护。
偷懒并不总是能“有效躲避”问题,学习还要继续、继续。。。。。。

问题描述:Admin页面级联选择

解决方案

解决方案1:django-smart-selects -- 《Django学习8 -- 添加个人应用》中提到过这种方法。
                    应用在python早期版本,python3版本需要对源码进行修改,对数据库设计的级联关系也有要求。 -- 一直未实际应用

解决方案2:使用JS(JQuery,Ajax)对页面数据进行处理
                    不常用此技术,从网上照抄了代码,照葫芦画瓢,进行修改
                    参考文档 -- https://blog.csdn.net/lsysafe/article/details/83051352,)

  1. 建将并寻找存储字段关联关系,此处使用 project  和 task 进行说明(一个project可以有多个task)
  2. 使用django admin后台管理程序生成页面(如下图):建model -- admin注册 -- admin生成页面 -- view处理页面数据显示逻辑
  3. 确认级联关系:当选择 project 时,task 中只显示与 project 相关联的数据
  4. view页面处理数据逻辑
     
    ## get task list by select project in page
    def gettasks(request):
        if request.method == 'GET':   -- 当project选择值变化时,get到对应的值
                                      -- post方法是否可用?没研究
            project=request.GET.get('selpro')    -- 页面ajax data数据设置
            if project:
                data = list(Task.objects.filter(project=project).values("taskname"))  -- get task by select project                
                return JsonResponse(data, safe=False)

     

  5. Get方法获取参数,需要对view方法配置对应的URL
        url('gettask/', view.gettasks,name='gettask'), -- 与veiw方法对应
  6. 设计页面,此处使用 Admin 框架自带后台管理页面模板 -- 参考 django Templates的使用
    * 在Template目录下新建change_form.html页面,对Admin change_from.html进行扩展(为了方便管理建将了对应的application目录)
    * 扩展 after_field_sets模块,在页面初始化模块完成后、操作页面元素时对操作和数据进行处理
    * 获取页面元素ID(与实际models中设置相关):project -- id_project, task -- id_task
    * html页面处理
    {% extends "admin/change_form.html" %}  -- 扩展原有页面,django Template灵活性体现
    {% load i18n admin_urls static admin_modify %}
    
    {% block after_field_sets %}  -- 扩展对应模块;
                                  -- 是否可以在其他模块处理,同样可以对页面进行处理,未做尝试
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
     <script type="text/javascript">
    
        $("#id_project").change(function() {   -- 在project选项变化时触发方法
          var selpro = $(this).val();
             {#alert(selpro);#}
    
          $.ajax({
            url: '/gettask/',              -- 使用get方法设置变化的project URL串;照抄,原理不明
                data:{"selpro":selpro},    -- 获取选中的project;此处与veiw中get方法一致
             type: 'GET',                  -- POST?
             dataType: 'json',
             success: function (data) {    -- 获取数据成功对显示内容进行处理
                var content='';
                 $.each(data, function(i, item){
                      content+='<option value='+item.taskname+'>'+item.taskname+'</option>';
                                           -- 生成Task数据为{key:value}字典
                    });
                $('#id_task').html(content) -- 显示task到对应的元素ID;照抄,原理不明
            },
          })
    	   .fail(function(){              -- 处理异常,当选择无效时显示;error呢?
                var content='';
                content+='<option value= task> --------- </option>';
                $('#id_task').html(content)
    		  });
        });
    </script>
    {% endblock %}

     

问题回顾:从最初设计系统开始,这个问题应一直存在,一直以不会、不熟悉拖延着。后来使用时总是出现对应关联关系选择错误的情况,使用者反应“很不满意”,而后台修改错误的工作量越来越大,不得已才查看帮助、参考文档进行修改。

后续工作:

  1. 补充知识 JS(JQuery, Ajax),https://api.jquery.com/jquery.ajax/ -- 估计还要看使用者反馈,要不要偷懒;
  2. 页面出错或刷新后project/task如何响应,扩展哪个block;

知识扩展:模版继承  -- 待续

  1. {% extends “template_name” %}
    {% extends "base.html"%}     -- extend parent template
    {% block title %}            -- extend block
    
    {{ block.super }}            -- override or overwrite or cover parent template  
     
    {% endblock %}               -- end extend

     

  2. {% include “template_name” %}  
    包含另一模板
### 回答1: 你可以回答这个问题。django-vue-admin 是一个基于 Django 和 Vue.js 的全栈开发框架,可以快速搭建后台管理系统。它提供了丰富的组件和插件,可以帮助开发者快速构建出美观、易用的管理界面。 ### 回答2: django-vue-admin是一个基于Django和Vue.js开发的开源管理系统框架,旨在帮助开发者快速构建和定制现代化的管理系统。它采用前后端分离的架构,后端使用Django提供API接口,前端使用Vue.js进行展示和交互。 使用django-vue-admin,开发者可以快速搭建一个具备基本功能的管理系统。框架提供了一套完整的通用模型和视图,开发者只需根据自己的需求进行配置和扩展即可实现快速开发。同时,它采用了模块化和组件化的设计,开发者可以方便地替换和定制界面的各个组件,实现个性化的界面展示。 django-vue-admin还提供了丰富的功能模块,如用户管理、权限管理、角色管理、菜单管理等,开发者可以根据项目需要进行选择和集成。框架还支持多语言和多主题的配置,方便开发者根据不同用户需求进行界面定制。 此外,django-vue-admin还面向中小型项目进行了性能优化,采用了异步加载、缓存和CDN加速等技术,提高了系统的响应速度和用户体验。 总的来说,django-vue-admin是一个强大而灵活的管理系统开发框架,它简化了开发者的开发流程,提高了开发效率。无论是快速搭建简单的管理系统,还是进行个性化的定制开发,都可以选择django-vue-admin作为开发工具。 ### 回答3: django-vue-admin 是一个用于快速开发后台管理系统的开源项目。它的主要特点是结合了 Django 和 Vue.js 框架的优势,使开发者能够高效地创建功能完善、界面友好的管理系统。 django-vue-admin 提供了一套基础的后台管理功能,包括用户管理、角色管理、权限管理、日志管理等。开发者可以根据自己的需求进行功能定制和扩展。 django-vue-admin 的前端使用了 Vue.js 框架,通过组件化的方式构建用户界面,并且使用了 Element-UI 组件库来提供丰富的UI组件。这使得开发者能够快速搭建出现代化、响应式的管理系统界面。后端则使用了 Django 框架,提供了强大的数据处理和权限控制能力。 在开发上,django-vue-admin 使用了前后端分离的架构,前端和后端通过 API 进行通信。这使得开发者可以独立地进行前后端开发,提高了开发效率和团队协作能力。同时,由于前后端分离的优势,django-vue-admin 的性能也得到了明显的提升。 总之,django-vue-admin 是一个功能强大、易用、高效的后台管理系统开发框架。它能够帮助开发者快速开发出现代化的后台管理系统,并且具备良好的扩展能力。无论是个人开发者还是企业开发团队,都可以利用 django-vue-admin 来构建稳定、高效的管理系统。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值