思路

  1. 先找到控件id ,这样就可以监听change事件
  2. 然后把自己写的js加入xadmin中
  3. 添加url和view,接受ajax请求和发送数据

第一步:找到联动上下级的ID

在浏览器中通过F12查看

父级ID:id_files_category1

子级id:id_files_categoty2

第二步:ajax请求

$('#id_files_category1').change(function () {
var module = $('#id_files_category1').find('option:selected').val(); //获取父级选中值
$('#id_files_category2')[0].selectize.clearOptions();// 清空子级
$.ajax({
type: 'get',
url: '../../select/category1_category2/?module=' + module,
data: '',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader('X-CSRFToken', '{{ csrf_token }}')
},
success: function (data) {
data = JSON.parse(data.lesson)//将JSON转换 for (var i = 0; i < data.length; i++) { var test = {text: data[i].fields.category_name, value: data[i].pk, $order: i + 1}; //遍历数据,拼凑出selectize需要的格式
console.log(test)
$('#id_files_category2')[0].selectize.addOption(test); //添加数据
}
},
error: function (xhr, textStatus) {
console.log('error')
}
})
})

需要修改的地方:

我们使用了xadmin自带的selectize.js中的方法

  1. selectize.clearOptions()清空内容
  2. selectize.addOption() 添加数据

第三步,将js文件放入xadmin中

将js文件命名为按照xadmin/static/xadmin/js中的js文件命名的,否则会报错,将其放入xadmin/static/xadmin/js目录下,

第四步,让xadmin引用我们的js,

找到该文件,修改其中的AdminSelectWidget类,向里面加入我们的js

class AdminSelectWidget(forms.Select):

    @property
def media(self):
return vendor('select.js', 'select.css', 'xadmin.widget.select.js','xadmin.widget.categoryselect.js')

第五步:添加URL,我们写的ajax请求需要后台处理数据

views.py

# 二级联动View函数
class SelectView(LoginRequiredMixin, View):
def get(self, request):
# 通过get得到父级选择项
category1_id = request.GET.get('module', '')
# 筛选出符合父级要求的所有子级,因为输出的是一个集合,需要将数据序列化 serializers.serialize()
lessons = serializers.serialize("json", CategoryInfo.objects.filter(category_pid=int(category1_id)))
# 判断是否存在,输出
if lessons:
return JsonResponse({'lesson': lessons})

urls.py

url(r'^files/select/category1_category2/', SelectView.as_view(), name='category1_category2'),

完成!

效果图:

参考链接:https://blog.csdn.net/qq_16102629/article/details/81179250

django xadmin后台页面实现二级联动的更多相关文章

  1. xadmin后台页面的自定制

    01-自定制页面 注:最近找到了更好的解决办法:重写钩子函数版  https://www.cnblogs.com/pgxpython/p/10593507.html 需求背景:根据要实现的功能需求,x ...

  2. 解决了好几天的关于django xadmin后台增加链接并执行函数的问题

    由于xadmin后台封装的完整性,想要在后台做一些改动对于新手来说还是有点困难,目前解决的第一个问题: 在admin后台增加链接,使其改变上级签收状态 如图 点击签收按钮之后,改变其状态 代码展示: ...

  3. 七、xadmin 编辑界面实现二级联动

    很多时候,我们会遇到这种需求,通过一个select框中选择的值,去动态的加载另一个下拉框中的内容 对于前端的同学来讲,这个本应该是一个很简单的需求,获取第一个下拉框的值然后通过ajax去动态加载即可. ...

  4. xadmin后台页面定制和添加服务器监控组件

    xadmin定制 项目需要添加服务器监控页面,碍于xadmin不是很好自定义页面,之前写过插件,太麻烦了,还是直接改源码 原理其实很简单,因为xadmin的处理流程和django类似,都是通过拦截UR ...

  5. xadmin后台页面的自定制(2)重写钩子函数版

    由于项目有通过自定义页面来实现功能的需求,百度也查了很多资料,也没找到合适的方法,所以决定分析源码,通过对源码的分析,找到了此方法. 01-需求 首先,如果要在xadmin中展示一个数据管理页面,首先 ...

  6. Django xadmin后台添加富文本编辑器UEditor的用法

    效果图: 步骤: 1.利用命令:pip install DjangoUeditor,安装DjangoUeditor,但由于DjangoUeditor没有python3版本的,从的Github上把修改好 ...

  7. [py][mx]django xadmin后台配置

    xadmin配置 - 安装 pip install -r https://github.com/sshwsfc/xadmin/blob/django2/requirements.txt 以下被我测试通 ...

  8. django:下拉框二级联动实现

    注意:只列举核心部分代码 前台模板: 第一级下拉菜单: <div class="col-sm-4"> <select data-placeholder=" ...

  9. python测试开发django-54.xadmin添加自定义页面

    前言 xadmin后台如何添加一个自己写的页面呢?如果仅仅是在GlobalSettings添加url地址的话,会丢失左侧的导航菜单和顶部的页面,和整体的样式不协调. 新增页面后希望能保留原来的样式,只 ...

随机推荐

  1. SpringBoot 配置文件 中文乱码

    本方案,支持springboot 很简单 在配置文件中不写中文,写中文的ascll码 直接百度在线转ASCII,用工具 把中文转ASCII码==>\u628a\u4e2d\u6587\u8f6c ...

  2. mybatis关于ORM的使用以及设计(二)[DaoInterface 转换 Mapper代理对象]

    第一节中,分析了Mybatis的ORM框架的初始化,这篇来分析SQL执行过程中,对象->SQL是如何转换的 其中包含两种映射思想 ①DAO接口->Mapper实例 ②执行DAO的方法时,参 ...

  3. python学习笔记之五

    1.Python HTTP server win环境需要加cgi参数 python -m http.server --cgi 8000 其他如下: python -m http.server 8080 ...

  4. Oracle “CONNECT BY” (层级递归查询)

    Oracle “CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询.其语法是: ? 1 2 [ START WITH condition ] CONNECT BY [ NOCYCL ...

  5. win nginx + php bat启动/停止脚本

    启动脚本 @echo offREM Windows 下无效REM set PHP_FCGI_CHILDREN=5 REM 每个进程处理的最大请求数,或设置为 Windows 环境变量set PHP_F ...

  6. 关于RandomAccessFile一个坑!!!!

    最近正好遇到了使用RandomAccessFile做断点下载的情况,被一个问题坑了好多次 本来的代码: RandomAccessFile randomAccessFile = new RandomAc ...

  7. Centos7上使用tomcat8

    1.上传apache-tomcat-8.5.39.tar.gz到/usr/local 2.解压文件:tar -zxvf apache-tomcat-8.5.39.tar.gz 3.把文件夹名改简单一些 ...

  8. spring静态注入

    与其说是静态注入(IOC),不如讲是对JavaBean 的静态成员变量进行赋值. 一般我们在使用依赖注入的时候,如果当前对象(javaBean )创建(实例化)一次,那么非静态的成员变量也会实例化一次 ...

  9. ios监听静音键和音量键事件

    http://blog.csdn.net/slinloss/article/details/7870559

  10. Powerdesigner16 逆向 postgresql9.2

    参考配置连接:https://www.cnblogs.com/simpleZone/p/5489781.html 过程中遇到的问题: 1.Powerdesigner需要用32位的jdk进行逆向,所以需 ...