Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >django admin后台的新增页面,修改页面,实现城市的三级联动,需要修改源码(有代码)

django admin后台的新增页面,修改页面,实现城市的三级联动,需要修改源码(有代码)

作者头像
一写代码就开心
发布于 2022-06-05 04:04:22
发布于 2022-06-05 04:04:22
1.3K00
代码可运行
举报
文章被收录于专栏:java和pythonjava和python
运行总次数:0
代码可运行

目录

1 需求

在django的admin后台的新增页面和修改页面,实现三级联动,就是你选择一个省份,下面的城市就是这个省份的,选择不同的省份,下面就是不同的城市,实现这种联动

2 实现

首先是建立一个表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class City(models.Model):
    province = models.CharField(max_length=100, null=True, blank=True, verbose_name='省份')
    city = models.CharField(max_length=100, null=True, blank=True, verbose_name='城市')
    district = models.CharField(max_length=100, null=True, blank=True, verbose_name='区/县')


    def __str__(self):
        return self.province

    class Meta:
        verbose_name_plural = verbose_name = '城市'
        db_table = 'City'

将这个表生成到数据库里面,在admin.py里面注册到admin的后台

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class CityForm(forms.ModelForm):
    class Meta:
        widgets = {
            'province': forms.Select(),
            'city': forms.Select(),
            'district': forms.Select(),
        }

class CityAdmin(admin.ModelAdmin):
    form = CityForm
    fields = ( 'province', 'city', 'district')
    list_display = ( 'province', 'city', 'district')


admin.site.register(City, CityAdmin)

写相关的接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    url(r'^province/$', views.choose_province, name='city'),  #
    url(r'^city/$', views.choose_city, name='shi'),  #
    url(r'^district/$', views.choose_district, name='xian'),  #

我是在代码里面写死了城市,你可以将逻辑改为从数据库查询数据,反正返回的东西一样就可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LOCATION = {
    '山西省':
        {'太原市':
             ['小店区', '杏花岭', '迎泽区']
         },
    '吉林省':
        {'长春市':
             ['南关区', '朝阳区', '二道区', '绿园区']
         },
    '海南省':
        {'海口市':
             ['龙华区', '琼山区', '美兰区']
         }
}


# 返回省
def choose_province(request):
    province = list(LOCATION.keys())
    return JsonResponse(province, safe=False)
#  返回市
def choose_city(request):
    province = request.GET.get('p')
    cities = list(LOCATION[province].keys())
    return JsonResponse(cities, safe=False)

# 返回县
def choose_district(request):
    province = request.GET.get('p')
    city = request.GET.get('c')
    districts = LOCATION[province][city]
    return JsonResponse(districts, safe=False)

之后就是重写页面,我使用的是simplue的UI框架,所以找到他源码里面的这个文件

在自己的模板下创建相同的目录

然后将源码里面的东西复制进去

然后里面的东西什么都不变,在最下面加上这个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
(function($) {
            $('#id_city').change(function() {
                let p_id = $('#id_province').val();
                let c_id = $('#id_city').val();
                if (p_id && c_id ){
                    $.get('/district/', {"p": p_id, "c": c_id }, function(a_info) {
                        var area_info = $('#id_district').empty().append('<option value>' + '---------' + '</option>');
                        console.log(a_info);
                        $.each(a_info, function(i, area) {
                            area_info.append('<option value="' + area + '">' + area + '</option>')
                        });
                        {% if change %}
                            $("#id_district").find("option:contains({{ original.district }})").attr('selected', true);
                        {% endif %}
                    });

                }else {
                    $('#id_district').empty()
                }

            });

            $('#id_province').change(function() {
                let p_id = $('#id_province').val();

                 if (p_id ) {
                     $.get('/city/', {'p': p_id}, function (c_info) {
                         var city_info = $('#id_city').empty().append('<option value>' + '---------' + '</option>');
                         $.each(c_info, function (i, city) {
                             city_info.append('<option value="' + city + '">' + city + '</option>')
                         });
                         {% if change %}
                             $("#id_city").find("option:contains({{ original.city }})").attr('selected', true);
                             $("#id_city").trigger("change");
                         {% endif %}
                     });
                 }else {
                    $('#id_district').empty()
                     $('#id_city').empty()
                }
            });

            $.get('/province/', function(p_info) {
                var province_info = $('#id_province').empty().append('<option value>' + '---------' + '</option>');
                $.each(p_info, function(i, province) {
                    province_info.append('<option value="' + province + '">' + province + '</option>')
                });
                {% if change %}
                    $("#id_province").find("option:contains({{ original.province }})").attr('selected', true);
                    $("#id_province").trigger("change");
                {% endif %}
            });
        })(django.jQuery);


</script>

以上就可以了,实现了三级联动;

最终的结果就是

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Django Admin实现三级联动(省市区)
找到django源码中的change_form.html(django/contrib/admin/templates/admin/)文件,复制到app下templates目录中. 在admin中指定自定义的模板文件change_form_template = 'area.html'
菲宇
2022/12/21
2K0
Django Admin实现三级联动(省市区)
地址管理之省市区三级联动菜单
地址管理之省市区三级联动菜单 三级联动表单 导入省市区的数据 下载sql语句的文件 在数据库中执行:source 文件路径即可导入 导入成功之后,在数据库中会出现三张表,分别代表省,市,区 创建实体类
爱撒谎的男孩
2018/05/25
4.2K1
servlet+jsp/js二种实现方式:三级联动(附加demo代码)
V_1.0 准备工作: #1.创建表 [城市信息表] [行政区信息表] create table city( cid int, cname varchar(200), pid int ); create table qu( qid int, qname varchar(200), cid int ); 2.制造测试数据 insert into city values(1,"北京市",
挑战者
2018/06/29
2.9K0
第117天:Ajax实现省市区三级联动
(3)封装回调函数,回调函数success中用$.each循环每一条数据,动态创建option,并将数据添加到option中
半指温柔乐
2018/09/11
2K0
第117天:Ajax实现省市区三级联动
Django实现统计网站访问次数、访问 ip 、受访页面
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菲宇
2019/10/22
7.6K1
X-admin框架中change事件失效如何实现省市区三级联动
Uncaught TypeError: layui.form is not a function的错误
meihuasheng
2021/03/18
6130
Django Admin 后台自定制技巧
Django最强大的部分之一是自动管理界面。它从模型中读取元数据,以提供一个快速的,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容。管理员的建议用法仅限于组织的内部管理工具。它并非旨在构建您的整个前端。
王瑞MVP
2022/12/28
1.5K0
Django Admin 后台自定制技巧
Django 分页和使用Ajax5.3
分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数 属性 count:对象总数 num_pages:页面总数 page_range:页码列表,从1开始,例如[1, 2, 3, 4] 方法 page(num):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常 异常exception InvalidPage:当向page()传入一个
Lansonli
2021/10/09
3.1K0
城市三级联动查询
很多实现三级联动查询的方式是通过数据库的方式查询的,但是有时候我们查询的不一定是城市三级联动,有可能是其他的三级联动查询,那么数据库的修改就成了大问题。今天我来给大家介绍一种无刷新的js实现三级联动查询方法,例子就是城市的三级联动。我们先看一下主页html代码:
OECOM
2020/07/02
3.2K0
小程序php:省市区三级联动
https://download.csdn.net/download/TiaoZhanJi_Xian/20087538
黄啊码
2021/09/26
2.4K0
layui省市区三级联动插件
这个是一个layui省市区三级联动插件,近来使用layui后台模板框架开发后台系统,要用到省市县/区三级联动,本想从网上找个现成的轮子,然没有自己想要的需求,就自己造了个。
孤烟
2020/09/27
4.2K0
省市县三级联动
上次找到地区编码后,就测试省市县。网上找到例子感觉不是很合适,然后修改了下。 本来是从自己数据库查询,但做测试的话,在网上找到了一个地区编码的api,然后就是跨域问题。原来用ajax访问失败,getJSON可以,但getJson有同步问题,设置了全局参数也不管用,只好重复使用了。 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 <scri
Ryan-Miao
2018/03/13
3K0
【愚公系列】2022年01月 Django商城项目16-用户中心-地址管理之省市三联动功能实现
表结构为: id:主键 name:省市名称 parent_id:自关联主键id
愚公搬代码
2022/01/24
3300
【愚公系列】2022年01月 Django商城项目16-用户中心-地址管理之省市三联动功能实现
android wheelview实现三级城市选择
很早之前看淘宝就有了ios那种的城市选择控件,当时也看到网友有分享,不过那个写的很烂,后来(大概是去年吧),我们公司有这么一个项目,当时用的还是网上比较流行的那个黑框的那个,感觉特别的丑,然后我在那个
xiangzhihong
2018/02/01
2.3K0
android wheelview实现三级城市选择
使用JQuery和bootstrap-select实现世界城市的三级联动(中英互译)
使用JQuery和bootstrap-select实现世界城市的三级联动(中英互译) 我们公司是做外贸电商的,需要一个世界城市的三级联动,在网上找好久发现都没有合适的轮子,只能自己写一个 使用该轮子需要引用bootstrap-select 使用该轮子需要引用JQuery 使用该轮子需要引入世界城市的json数据 var worldcountry = Widget.extend({ init: function () { this.total(this); windo
用户6379025
2022/12/26
3.5K4
使用JQuery和bootstrap-select实现世界城市的三级联动(中英互译)
Django+Vue开发生鲜电商平台之9.个人中心功能开发
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/08/02
1.8K0
Django学习笔记之利用Form和Ajax实现注册功能
一、注册相关的知识点 1、Form组件 我们一般写Form的时候都是把它写在views视图里面,那么他和我们的视图函数也不影响,我们可以吧它单另拿出来,在应用下面建一个forms.py的文件来存放 2
Jetpropelledsnake21
2018/07/04
9310
Ajax 案例之三级联动
  每次在博客园网站写博客,格式真的好难搞,还望好心人告知更好的编辑工具。接下来进入正题:三级联动(其效果演示可看我的博文 Ajax 学习总结 末尾)。 1. 数据表设计(Oracle) 新建数
bgZyy
2018/05/16
3K0
PHP自动(智能)识别地址到表单
地址自动识别现在普遍,特别是用在快递填写地址,姓名,手机号码的时候,会把这些按照一定的规范填写后,点击自动识别后,会自动填写到各自的input。最近也简单的实现了这个功能,给后台添加用户的时候,自动识别地址。下面咱们来看看具体实现。
golang开发者
2019/07/16
3.9K0
PHP自动(智能)识别地址到表单
Django Admin后台定制简单监控页
我们使用Django的Admin二次定制一个图形化界面,首先我们把语言设置为中文简体.
王瑞MVP
2022/12/28
3750
Django Admin后台定制简单监控页
相关推荐
Django Admin实现三级联动(省市区)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验