做一个省份选择器

使用django做后端, mysql数据库, jQuery

列出结构主要的文件, 其它配置比较简单

  • models.py

    因为所有数据的结构基本一致, 把所有省份, 市和区全部存储一张表, 实现表的自连接
from django.db import models

class Pro(models.Model):
name = models.CharField(max_length=200)
parent = models.ForeignKey('self', null=True, blank=True)
mysql> desc selCity_pro;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(200) | NO | | NULL | |
| parent_id | int(11) | YES | MUL | NULL | |
+-----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec) mysql>

插入数据类似这种

INSERT INTO `selCity_pro` VALUES ('110000', '北京市', null);
INSERT INTO `selCity_pro` VALUES ('110100', '东城区', '110000');
INSERT INTO `selCity_pro` VALUES ('110200', '西城区', '110000');
INSERT INTO `selCity_pro` VALUES ('110500', '朝阳区', '110000');
INSERT INTO `selCity_pro` VALUES ('110600', '丰台区', '110000');
INSERT INTO `selCity_pro` VALUES ('110700', '石景山区', '110000');
INSERT INTO `selCity_pro` VALUES ('110800', '海淀区', '110000');
......
  • 模板

index.html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>首页</title>
<script src="/static/js/jquery-2.1.4/jquery.min.js"></script>
<script>
$(function(){
$.get('/pro', function(data){
con = $('#province');
$.each(data, function(index, item){
con.append("<option value='"+item.id+"'>"+item.name+"</option>")
});
});
$('#province').change(function(){
val1 = $(this).val();
$.get('/city/'+val1, function(data1){
con1 = $('#city');
con1.empty();
con1.append("<option>选择市</option>");
$.each(data1, function(index, item1){
con1.append("<option value='"+item1.id+"'>"+item1.name+"</option>")
})
})
});
$('#city').change(function(){
val2 = $(this).val();
$.get('/area/'+val2, function(data2){
con2 = $('#area');
con2.empty();
con2 = con2.append("<option>选择区</option>");
$.each(data2, function(index, item2){
con2.append("<option value='"+item2.id+"'>"+item2.name+"</option>")
})
})
});
})
</script>
</head>
<body>
<select id="province" name="province">
<option>选择省</option>
</select>
<select id="city" name="city">
<option>选择市</option>
</select>
<select id="area" name="area">
<option>选择区</option>
</select>
</body>
</html>
  • 视图函数views.py
from django.shortcuts import render
from django.http import HttpResponse
import json
from models import Pro
from django.http import JsonResponse def index(request):
return render(request, 'selCity/index.html') def pro(request):
pro_objs = Pro.objects.filter(parent__isnull=True)
info_list = [{'id':pro.id, 'name':pro.name} for pro in pro_objs]
return HttpResponse(json.dumps(info_list), content_type="application/json") def city(request, p_id):
city_objs = Pro.objects.filter(parent=p_id)
city_list = [{'id':city.id, 'name':city.name} for city in city_objs]
return HttpResponse(json.dumps(city_list), 'application/json') def area(request, a_id):
area_objs = Pro.objects.filter(parent=a_id)
area_list = [{'id':area.id, 'name':area.name} for area in area_objs]
return HttpResponse(json.dumps(area_list), 'application/json')

用Django做一个省份选择器的更多相关文章

  1. 自然语言处理NLP学习笔记三:使用Django做一个NLP的Web站点

    前言: 前面我们已经能初步实现一个中文自然处理语言的模型了,但交互界面是命令行的,不太友好. 如果想做一个类似http://xiaosi.trs.cn/demo/rs/demo的界面,那就还需要继续往 ...

  2. WPF 自己做一个颜色选择器

    程序开发过程中,经常会遇到需要支持动态配置主题颜色的问题,通常,一个程序会有多种不同的颜色风格主题供选 有时候,更细致一些的地方,会需要支持自己配置颜色,这样我们就需要一个颜色选择器啦,下面是我自己开 ...

  3. 用Django做一个团队介绍

    所用工具 Pycharm 社区版 Django 2.x Python 3.6.4 总目录 settings中的设置 总的路由设置 templates中的index.html文件 <!DOCTYP ...

  4. Unity3d—做一个年月日选择器(Scroll Rect拖动效果优化)— 无限滚动 + 锁定元素

    最近..... 废话不多说上效果图 用的是UGUI 我先说思路 通过判断元素的位置信息来改变Hierarchy的顺序 实现无限滚动 改变位置的同时也要不断的调整Content的位置防止乱跳 元素锁定就 ...

  5. 利用Django做一个简单的分页页面

    views代码: from django.shortcuts import render from django.conf import settings from booktest.models i ...

  6. 通过django搭建一个简易的web页面(实现数据的查询、添加、修改、删除)

    一.创建django项目 通过命令创建: django-admin startproject 项目名称 创建app应用 python3 manage.py startapp 应用名 #这里manage ...

  7. 用Jquery做一个时间日期选择器

    今天我们就用Jquery做一个时间日期选择器,当打开网页时,文本框里面显示的是当前的日期,点击文本框可以出现年.月.日的下拉菜单,并且可以选择,会根据年份的选择判断是否是闰年,从而改变二月的天数,闰年 ...

  8. 用Django加PIL做一个证件照模板生成器网页

    最近在整理自己的简历,发现简历上面的ID照有些太老了,所以就准备重新准备一些证件照,刚好最近在弄自己的博客网站,想着直接做一个网页工具出来,直接生成证件照模板,这样还可以省去PS的麻烦.而且照片涉及到 ...

  9. 使用Vue+Django+Ant Design做一个留言评论模块

    使用Vue+Django+Ant Design做一个留言评论模块 1.总览 留言的展示参考网络上参见的格式,如掘金社区: 一共分为两层,子孙留言都在第二层中 最终效果如下: 接下是数据库的表结构,如下 ...

随机推荐

  1. css__金属质感的文字

    金属质感的文字 网上看到的优秀思想!神奇的css~~~~ css div.a { width: 300px; text-align: center; color: white; background: ...

  2. angular js 和 dajango 标签{{}} 冲突

    问题描述: 如果在django的模板中使用{{ }},不会被angularjs 识别. 解决办法: >1.5 的django中,将需要angularjs解释的{{expression}}放在 v ...

  3. 你不知道的 flex 技巧

    一.使用 Auto Margins 对齐 不需要给图片使用任何的 flex,也不需要给父容器设置 space-between,只需要给 ' BUY-BUY-BUY' 按钮设置 margin-left: ...

  4. ISO文件:AMD64和i386的区别

     下载kali系统时,出现两个选项:ADM64和i386,那么这两者的区别是什么?  i386=Intel 80386.其实i386通常被用来作为对Intel(英特尔)32位微处理器的统称. AMD6 ...

  5. grid栅格布局

    前面的话 Grid布局方式借鉴了平面装帧设计中的格线系统,将格线运用在屏幕上,而不再是单一的静态页面,可以称之为真正的栅格.本文将详细介绍grid布局 引入 对于Web开发者来说,网页布局一直是个比较 ...

  6. java当中成员变量和局部变量的区别

    1:成员变量定义在类中,整个类中都可以访问.2:局部变量定义在函数,语句,局部代码块中,只在所属的区域有效.3:成员变量存在于堆内存的对象中.4:局部变量存在于栈内存的方法中.5:成员变量随着对象的创 ...

  7. MySQL NULL值

    我们已经看到SQL SELECT命令和WHERE子句一起使用,来从MySQL表中提取数据, 但是,当我们试图给出一个条件,比较字段或列值设置为NULL,它确不能正常工作. 为了处理这种情况,MySQL ...

  8. LODOP之票据连续套打笔记<二>

    接着上一篇博文,继续说说关于lodop,关于模板设计及相关的这里不多说了,上一篇博文最下面的推荐可以看看,说的很比较清楚,今天说说我在项目中运用套打实现分页预览和打印的, 之前弄lodop打印的时候发 ...

  9. My new life

    第一次开始写博客,也是在学长的建议下想要正式的写的.有点小激动,这篇博客标志着一个新的开始,它将记录下我学习编程的生活,也象征着我将向着自己渴望的方向发展.不过这篇博客就真的是一篇随笔哈哈. 希望我的 ...

  10. (转载)Sybase:bcp命令参考

    参考文档: http://blog.csdn.net/wwp1026/article/details/6900569