python django mysql web页面多级联动_python测试开发django-57.xadmin选项二级联动

前言

当我们选择项目分类的时候,一个项目下关联多个模块,同时有这两个选项框的时候,需要实现选中一个项目,模块里面自动删除出该项目下的模块,如下图这种

54087dacec801f037f40cceb311ed816.png

解决基本思路: 1.写个jqeury脚本监听change事件 2.ajax发个请求给后端,用views试图函数实现筛选,回传到页面上 3.xadmin加载js脚本

ajax请求

关于moles相关的内容就不重复写了,打开后台页面,查看select标签的id值,这个id值就是id_和Fieldname的组合 使用了xadmin自带的selectize.js中的方法

selectize.clearOptions()清空内容

selectize.addOption() 添加数据

39bcfeab6b42bfd9b44502a5cfb4b1c4.png

$("#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

39b5c96b6708e55217b7e85e7abeca0b.png

views试图函数和urls.py配置

views.py写个试图函数,删选对应的数据,返回json

# views.py

from django.http import HttpResponse, JsonResponse

from django.core import serializers

import json

from .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 url

from django.contrib import admin

import xadmin

from hello import views

urlpatterns = [

url(r'^xadmin/', xadmin.site.urls), # xadmin

url(r'^admin/', admin.site.urls), # 原来的admin

url(r'^select_module/', views.select_m),

]

加载js文件

xadmin加载自己写的js文件,可以参考之前写的这篇https://www.cnblogs.com/yoyoketang/p/10717388.html 接下来把自己写的javascript脚本放到/xadmin/static/xadmin/js目录下

c5a0195f461f3f1bd34cfd1c788b414c.png

注意前面要加个分号(;),要不然不生效

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 media

xadmin.site.register(models.ApiTest, ApiTestAdmin)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值