
python测试开发django-57.xadmin选项二级联动
发布日期:2021-05-09 09:02:03
浏览次数:12
分类:博客文章
本文共 3053 字,大约阅读时间需要 10 分钟。
前言
当我们选择项目分类的时候,一个项目下关联多个模块,同时有这两个选项框的时候,需要实现选中一个项目,模块里面自动删除出该项目下的模块,如下图这种
解决基本思路:
1.写个jqeury脚本监听change事件2.ajax发个请求给后端,用views试图函数实现筛选,回传到页面上3.xadmin加载js脚本ajax请求
关于moles相关的内容就不重复写了,打开后台页面,查看select标签的id值,这个id值就是id_和Fieldname的组合
使用了xadmin自带的selectize.js中的方法- selectize.clearOptions()清空内容
- selectize.addOption() 添加数据
$("#id_p_name").change(function (e) { var mid = $(this).val(); $('#id_m_name')[0].selectize.clearOptions(); //二级select清空选项 $.ajax({ type: "get", url: "/select_module/?mid=" + mid, async: true, beforeSend: function (xhr, settings) { xhr.setRequestHeader("X-CSRFToken", $.getCookie("csrftoken")); }, success: function (data) { data = JSON.parse(data.msg)//将JSON转换 for (var i = 0; i < data.length; i++) { var test = {text: data[i].fields.module_name, value: data[i].pk, $order: i + 1}; //遍历数据,拼凑出selectize需要的格式 $('#id_m_name')[0].selectize.addOption(test); //添加数据 } }, error: function (xhr, textStatus) { console.log(xhr); console.log(textStatus); } })})
可以先在浏览器上调试下,确保没问题后,再加载js
views试图函数和urls.py配置
views.py写个试图函数,删选对应的数据,返回json
# views.pyfrom django.http import HttpResponse, JsonResponsefrom django.core import serializersimport jsonfrom .models import ModuleName# Create your views here.# 二级联动View函数def select_m(request): # 通过get得到父级选择项 m_id = request.GET.get('mid', '') # 筛选出符合父级要求的所有子级,因为输出的是一个集合,需要将数据序列化 serializers.serialize() modules = serializers.serialize("json", ModuleName.objects.filter(project_info_id=int(m_id))) # 判断是否存在,输出 if modules: return JsonResponse({"msg": modules})
urls.py设置一个访问地址
from django.conf.urls import urlfrom django.contrib import adminimport xadminfrom hello import viewsurlpatterns = [ url(r'^xadmin/', xadmin.site.urls), # xadmin url(r'^admin/', admin.site.urls), # 原来的admin url(r'^select_module/', views.select_m),]
加载js文件
xadmin加载自己写的js文件,可以参考之前写的这篇
接下来把自己写的javascript脚本放到/xadmin/static/xadmin/js目录下注意前面要加个分号(😉,要不然不生效
get_media加载js
xadmin注册的时候,重写get_media方法,添加xadmin.add.select.js
class ApiTestAdmin(object): list_display = ["name", "url", "type"] def get_media(self): # media is the parent's return value (modified by any plugins) media = super(ApiTestAdmin, self).get_media() + self.vendor('xadmin.page.list.js', 'xadmin.page.form.js') # if self.list_display_links_details: # media += self.vendor('xadmin.plugin.details.js', 'xadmin.form.css') # xadmin.list.xxx.js是自己写的js脚本 media += self.vendor('xadmin.add.select.js', 'xadmin.form.css') return media # media = super(ControlImage,self).get_media() # media.add_js(('js/content.js',)) # 这种方法行不通,会报找不到.add_js方法 # return mediaxadmin.site.register(models.ApiTest, ApiTestAdmin)
主要思路参考这篇博客
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月20日 16时11分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mysql 证明为什么用limit时,offset很大会影响性能
2019-03-06
http头部 Expect
2019-03-06
JAP(JustAuthPlus) v1.0.0 版本正式发布
2019-03-06
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
C#实现outlook自动签名
2019-03-06
MySQL 5.5 My.cnf 模版
2019-03-06
使用mysqladmin ext了解MySQL运行状态【转】
2019-03-06
percona-toolkit 之 【pt-archiver】
2019-03-06
【程序员的脑洞故事】盘古,开辟天地
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
对比讲解lambda表达式与传统接口函数实现方式
2019-03-06
使用java8API遍历过滤文件目录及子目录及隐藏文件
2019-03-06
精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解
2019-03-06
java9系列第二篇-资源自动关闭的语法增强
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
【数组】59. 螺旋矩阵 II
2019-03-06
【哈希表】1. 两数之和
2019-03-06
【栈和队列】232. 用栈实现队列
2019-03-06
安装Pyte失败的解决方法
2019-03-06