Django实现 省 市 县 自关联的下拉级联

Django实现 省 市 县 自关联的下拉级联

前端部分: 三个下拉拉菜单进行级联

 1 <body>
 2 <select id="province" >
 3     <option value="">请选择省份</option>
 4 </select>
 5 <select id="city">
 6     <option value="">请选择城市</option>
 7 </select>
 8 <select id="district">
 9     <option value="">请选择区/县</option>
10 </select>
11 </body>

 

利用ajax进行get请求:

当改变省份的时候,将市和县的信息清空(可能会上一次选择省份再次选择省份会市后面数据多余),再利用ajax提交get获取当前省份下的城市,放入city中

当改变城市的时候,将县的信息清空(多次选择会产生数据多余),再利用ajax提交get获取当前城市下的所有区县放入district中

 1 $(function(){
 2 
 3 // 获取省份
 4 $.get('/getProvince/',function(data){
 5 for(var i = 0,len = data.provinces.length; i<len ;i++){
 6     $new = $("<option value="+data.provinces[i][0] +">"+  data.provinces[i][1]  +"</option>" );
 7     $("#province").append( $new );
 8 }
 9 
10 });
11 
12 
13 //改变省份后
14 $("#province").change(function(){
15 //清空市和区
16 $("#city").empty().append('<option value="">请选择城市</option>');
17 $("#district").empty().append('<option value="">请选择区/县</option>');
18 $.ajax({
19     url:'/getCity/',
20     type:'get',
21 
22     data:{"city_id":$(this).val()}
23 }).done(function(data){
24     for(var i = 0,len = data.cities.length; i<len ;i++){
25         $new = $( "<option value="+data.cities[i][0] +">"+  data.cities[i][1]  +"</option>" );
26         $("#city").append( $new );
27     }
28 });
29 });
30 
31 //改变城市后
32 $("#city").change(function(){
33 //清空市和区
34 $("#district").empty().append('<option value="">请选择区/县</option>');
35 $.ajax({
36     url:'/getDistrict/',
37     type:'get',
38     data:{"district_id":$(this).val()}
39 }).done(function(data){
40     for(var i = 0,len = data.district.length; i<len ;i++){
41         $new = $( "<option value="+data.district[i][0] +">"+  data.district[i][1]  +"</option>" );
42         $("#district").append($new );
43     }
44 });
45 });
46 
47 })

 

 

后端部分:

views视图:

 1 # 级联菜单
 2 def getAreas(request):
 3     return render(request,'booktest/getAreas.html')
 4 
 5 #获得省份
 6 def getProvince(request):
 7     provinces = AreaInfo.objects.filter(aParent__isnull = True)
 8     res = []
 9     for i in provinces:
10         res.append( [i.id , i.atitle] )
11     return JsonResponse({'provinces':res})
12 
13 #获得城市
14 def getCity(request):
15     city_id = request.GET.get('city_id')
16     cities = AreaInfo.objects.filter(aParent_id=city_id)
17     res = []
18     for i in cities:
19         res.append([i.id, i.atitle])
20     return JsonResponse({'cities':res})
21 
22 #获得区 县
23 def getDistrict(request):
24     district_id = request.GET.get('district_id')
25     cities = AreaInfo.objects.filter(aParent_id=district_id)
26     res = []
27     for i in cities:
28         res.append([i.id, i.atitle])
29     return JsonResponse({'district': res})

 

模型部分:

 1 # 建立城市自关联数据库表
 2 class AreaInfo(models.Model):
 3     atitle = models.CharField(max_length=30)
 4     aParent = models.ForeignKey('self',null=True,blank=True)
 5 
 6     def __str__(self):
 7         return self.atitle
 8 
 9     class Meta:
10         db_table = 'areas'  # 指定表名称