做一个省份选择器

使用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. Why you should QC your reads AND your assembly?

    鲤鱼基因组:http://www.ntv.cn/a/20140923/52953.shtml   关于鲤鱼基因组的测定,数据质量控制遭到质疑. Why you should QC your reads ...

  2. .net 4.0 中的特性总结(二):默认参数、命名参数

    1.在方法定义的时候为参数指定一个默认值.调用方法的时候既可以像平时那样传入参数,也可以直接跳过不传入,这样的话,就使用默认值传到方法里.例如: 2.在之前版本的C#中,方法定义的参数顺序必须与方法调 ...

  3. 关于MATLAB处理大数据坐标文件2017526

    运行六个特征,提高了3分,也就是说以前做的特征已经用完了,穷途末路,依靠以前的特征已经很难取得进步了,提出以下建议 1.测试集曾经运行错误的数据尽早画出图形,并尽可能发现问题并提出特征 2.运行其他程 ...

  4. 让div产生滚动条

    .demo{ padding-right:10px; overflow-y:auto; padding-left:10px; scrollbar-face-color:#ffffff; font-si ...

  5. 增广拉格朗日乘子法(Augmented Lagrange Method)

    转载自:增广拉格朗日乘子法(Augmented Lagrange Method) 增广拉格朗日乘子法的作用是用来解决等式约束下的优化问题, 假定需要求解的问题如下: minimize f(X) s.t ...

  6. [leetcode-513-Find Bottom Left Tree Value]

    Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input:  2 / \ 1 ...

  7. 【Android Developers Training】 27. 序言:和其它应用交互

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. 4.jsp的内置对象

    1.jsp有九大内置对象 out request response session application page pagecontext exception config 2.用户发请求 requ ...

  9. 再谈AbstractQueuedSynchronizer:共享模式与基于Condition的等待/通知机制实现

    共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...

  10. 关于jquery全选反选 批量删除的一点心得

    废话不多说直接上代码: 下面是jsp页面的html代码: <table id="contentTable" class=""> <thead& ...