博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django的cmdb探索与开发(三)
阅读量:4692 次
发布时间:2019-06-09

本文共 3580 字,大约阅读时间需要 11 分钟。

关于select下拉框的实现的两种方法,一种为与前端ajax结合二级联动,一种为利用后台from类方法重写。

方法1 :

models里有Dataroom和Cabinet的类就不用说了。数据库用的是mysql不多做描述。

urls:

url(r'dataroomselect',dataroomselect),    url(r'cabinetselect(\d+)', cabinetselect)

View视图:

from django.http import JsonResponse#机房selectdef dataroomselect(request):    dataroomList = Dataroom.objects.all()    list1 = []    for item in dataroomList:        list1.append([item.basemodel_ptr_id,item.DataroomName])    print(list1)    return JsonResponse({
'data': list1 })#机柜selectdef cabinetselect(request,pid): print(pid) cabinetList = Cabinet.objects.filter(DataRoomID=pid) list1 = [] for item in cabinetList: list1.append([item.basemodel_ptr_id,item.CabinetName]) return JsonResponse({
'data': list1})

 

前端html和jq:

效果:

 

方法2 :

models.py,这里做了三个下拉框,其中设备类型是做的定项下拉,机房和机柜数据是动态下拉获取的是数据库中的数据

class ImportForm(forms.Form):    Device_type_list = (        (1, "服务器"),        (2, "网络设备"),        (3, "安全设备"),        (4, "存储设备")    )    #固定下拉选项,Device_type为post值,widget为下拉内容,下同。    device_type = forms.IntegerField(        widget = forms.Select(choices=Device_type_list)    )    #动态不定下拉选项    Dataroom_list = forms.IntegerField(    widget=forms.Select()    )    def __init__(self,*args,**kwargs):        super(ImportForm,self).__init__(*args,**kwargs)        #查询数据库获取下拉内容,根据主键basemodel_ptr_id查询获取name字段。并赋值给选项        self.fields['Dataroom_list'].widget.choices = Dataroom.objects.all().values_list('basemodel_ptr_id','DataroomName')class CabinetSelect(forms.Form):    # 机柜动态不定下拉选项    Cabinet_list = forms.IntegerField(        widget=forms.Select()    )    def __init__(self, *args, **kwargs):        super(CabinetSelect, self).__init__(*args, **kwargs)        # 查询数据库获取下拉内容,根据主键basemodel_ptr_id查询获取name字段。并赋值给选项        self.fields['Cabinet_list'].widget.choices = Cabinet.objects.all().values_list('basemodel_ptr_id', 'CabinetName')

view.py视图里直接初始化下拉框变量,然后给HTML页面直接调用即可。

def DeviceAdd(request):    obj = ImportForm(request.POST)if Dataroom.objects.all() and Cabinet.objects.all():        if request.method == "POST" and request.POST:            s.DataRoomID = request.POST["Dataroom_list"]            s.DataRoom = Dataroom.objects.get(basemodel_ptr_id=s.DataRoomID).DataroomName            s.CabinetID = request.POST["Cabinet_list"]            s.Cabinetname = Cabinet.objects.get(basemodel_ptr_id=s.CabinetID).CabinetName           return render_to_response("DeviceAdd.html",locals())

html:

{

{ obj.Dataroom_list }}

{

{ cabinetselect.Cabinet_list }}

效果:

 

很明显。方法1更实用,也更灵活,不过对前端知识有所要求。

 

转载于:https://www.cnblogs.com/feigerlan/p/9134068.html

你可能感兴趣的文章
Error和Exception
查看>>
Python和Singleton (单件)模式[转载]
查看>>
hibernate多对多单向(双向)关系映射
查看>>
二分查找题
查看>>
httpclient设置proxy与proxyselector
查看>>
IT常用单词
查看>>
拓扑排序
查看>>
NYOJ--32--SEARCH--组合数
查看>>
JMS
查看>>
gulpfile 压缩模板
查看>>
【34.14%】【BZOJ 3110】 [Zjoi2013]K大数查询
查看>>
【 henuacm2016级暑期训练-动态规划专题 A 】Cards
查看>>
第五篇:白话tornado源码之褪去模板的外衣
查看>>
设备常用框架framework
查看>>
bootstrap模态框和select2合用时input无法获取焦点(转)
查看>>
21世纪经济网APP
查看>>
解决NetworkOnMainThreadException
查看>>
1039 到底买不买
查看>>
农银电商项目学习笔记(一)
查看>>
MockObject
查看>>