美文网首页
django 自关联之 - 省市县

django 自关联之 - 省市县

作者: _琳哥 | 来源:发表于2018-01-23 19:43 被阅读787次

表的自关联, 实现省市区的联动

models:
class AreaInfo(models.Model):
    title = models.CharField(max_length=20)
    pid = models.ForeignKey('AreaInfo', null=True)
  • 主键使用的默认生成的主键id
  • title存储省市县名称
  • pid_id作为外键 进行自关联
views

定义两个view, 一个用来返回模板 , 一个用来根据市区返回对应的json

  • area 用来返回模板
def area(request):
    return render(request, 'booktest/area.html')
  • getArea 用来返回json数据
def getArea(request, id):  # 接收一个参数的id, 指modde中的pid属性对应的字段,即表中的pid_id
    area_pid = int(id)  # 将参数转成int类型
    if area_pid == 0:  # 为0时表示为查询省 , 省的pid_id为null
        area_data = AreaInfo.objects.filter(pid__isnull=True).values('id', 'title')
    else:  # 查询市或者区县
        area_data = AreaInfo.objects.filter(pid_id=area_pid).values('id', 'title')
    area_list = []
    # 虽然area_data看起来像是列表内包含多个字典类型的,
    # 但其实返回的是django.db.models.query.ValuesListQuerySet类型,
    # 所以需要自己转成list类型.
    # 否则不能进行json序列化.
    for area in area_data:
        area_list.append({'id': area['id'], 'title': area['title']})
    # 然后通过jsonResponse返回给请求方, 这里是list而不是dict, 所以safe需要传入False.
    return JsonResponse(area_list, content_type='application/json', safe=False)
urls
    url(r'^area$', views.area, name='area'),
    url(r'^getArea/(\d+)$', views.getArea, name='getArea'),
剩下的就是templates了
  • booktest/area.html 其中使用的jquery请求数据
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/booktest/js/jquery-1.12.4.min.js"></script>
    <script>

        getArea = function (a, b) {
            $.get('/getArea/' + a, function (dic) {
                $.each(dic, function (index, item) {
                    b.append('<option value="' + item.id + '">' + item.title + '</option>')
                })
            })
        };

        $(function () {
            pro = $('#pro'); //省
            city = $('#city'); //市
            dis = $('#dis'); //县

            // 查询省信息
            getArea(0, pro);
            //根据省的改变查询市的信息
            pro.change(function () {
                city.empty().append('<option value="">请选择市</option>');
                dis.empty().append('<option value="">请选择县</option>');
                getArea(this.value, city)
            });
            //根据市的改变查询县的信息
            city.change(function () {
                dis.empty().append('<option value="">请选择县</option>');
                getArea(this.value, dis)
            })
        })

    </script>
</head>
<body>
<select id="pro">
    <option value="">请选择省</option>
</select>
<select id="city">
    <option value="">请选择市</option>
</select>
<select id="dis">
    <option value="">请选择县</option>
</select>
</body>
</html>
area.gif

相关文章

  • django 自关联之 - 省市县

    表的自关联, 实现省市区的联动 models: 主键使用的默认生成的主键id title存储省市县名称 pid_i...

  • Django模型-自关联

    新建模型AreaInfo,生成迁移 class AreaInfo(models.Model): atitle = ...

  • Django 2.1.7 模型管理器 models.Manage

    上一篇Django 2.1.7 模型的关联讲述了关于Django模型一对多、多对多、自关联等模型关系。 在查询数据...

  • Django数据库自关联

    外键关联是在子评论中,有关联字段的是子评论,子评论查父评论是正向,父评论查子评论是反向。 class Commen...

  • 6.Django_ORM_自关联例子

    这里用省市区的关联下拉框为例子 a.1.创建数据模型类poills/models.py: a.2.数据库迁移,生成...

  • 2018年湖北公务员考试调剂858人公告

    湖北省2018年度省市县乡考试录用公务员空缺职位调剂公告 湖北省2018年省市县乡考试录用公务员资格复审已经结束,...

  • 2018-07-30自关联

    自关联 设计省信息的表结构provincesidptitle 设计市信息的表结构citysidctitleproi...

  • 2018-12-03

    日前,中央正式备案同意《广东省关于市县机构改革的总体意见》(以下简称《总体意见》),标志我省市县机构改革进入全面...

  • Django多表关联

    一对一关联关系 使用方法 注意事项如果前期双方没有关联,后期添加对关联属性时,应都通过后一个class(设置有一对...

  • Django 多表关联

    1. 一对一关联关系 使用方法数据库体现Django程序模型通过外键关联,外键要设在多的一方OneToOneFie...

网友评论

      本文标题:django 自关联之 - 省市县

      本文链接:https://www.haomeiwen.com/subject/lwheaxtx.html