python省市区三级联动_Django Admin实现三级联动的示例代码(省市区)

通过自定义Admin的模板文件实现省市区的三级联动.要求创建记录时,根据省>市>区的顺序选择依次显示对应数据.

修改记录时默认显示已存在的数据.

Model

class Member(models.Model):

name = models.CharField(max_length=100, verbose_name='姓名')

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='区/县')

class Meta:

verbose_name_plural = verbose_name = '人员'

def __str__(self):

return self.name

View和url

# views

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)

# urls

from person.views import choose_province, choose_city, choose_district

urlpatterns = [

path('province/', choose_province),

path('city/', choose_city),

path('district/', choose_district),

path('admin/', admin.site.urls),

]

Admin

class MemberForm(forms.ModelForm):

class Meta:

widgets = {

'province': forms.Select(),

'city': forms.Select(),

'district': forms.Select()

}

@admin.register(Member)

class MemberAdmin(admin.ModelAdmin):

form = MemberForm

fields = ('name', ('province', 'city', 'district'))

list_display = ('name', 'province', 'city', 'district')

change_form_template = 'area.html'

这里需要写一个form将省市区这三个字段显示为单选框.

模板文件

找到django源码中的change_form.html(django/contrib/admin/templates/admin/)文件,复制到app下templates目录中.

在admin中指定自定义的模板文件 change_form_template = 'area.html'

{% block admin_change_form_document_ready %}

src="{% static 'admin/js/change_form.js' %}"

{% if adminform and add %}

data-model-name="{{ opts.model_name }}"

{% endif %}>

(function($) {

$('#id_city').change(function() {

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

let c_id = $('#id_city').val();

$.get('/district/', {"p": p_id, "c": c_id }, function(a_info) {

var area_info = $('#id_district').empty().append('' + '---------' + '');

$.each(a_info, function(i, area) {

area_info.append('' + area + '')

});

{% if change %}

$("#id_district").find("option:contains({{ original.district }})").attr('selected', true);

{% endif %}

});

});

$('#id_province').change(function() {

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

$.get('/city/', { 'p': p_id }, function(c_info) {

var city_info = $('#id_city').empty().append('' + '---------' + '');

$.each(c_info, function(i, city) {

city_info.append('' + city + '')

});

{% if change %}

$("#id_city").find("option:contains({{ original.city }})").attr('selected', true);

$("#id_city").trigger("change");

{% endif %}

});

});

$.get('/province/', function(p_info) {

var province_info = $('#id_province').empty().append('' + '---------' + '');

$.each(p_info, function(i, province) {

province_info.append('' + province + '')

});

{% if change %}

$("#id_province").find("option:contains({{ original.province }})").attr('selected', true);

$("#id_province").trigger("change");

{% endif %}

});

})(django.jQuery);

参考: https://www.jb51.net/article/142409.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: Django Admin实现三级联动的示例代码(省市区)

本文地址: http://www.cppcns.com/jiaoben/python/230841.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[LeetCode]119.Pascal#39;s Triangle II

题目 Given an index k, return the kth row of the Pascal’s triangle. For example, given k 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra space? 思路 无 代码 /**------------------------------------* 日期&#xff1a…

2010.7.29 模式对话框

为什么点击ONOK后,对话框上的控件资源会被删除?OnOK做了什么事儿? 假如有一个对话框Class CMyDialog 我在CMyDialog中,声明了一个m_button,然后在OnInitDlg()中create这个buttton,即m_button.create() 然后…

终于有人做了我一直想做而不敢做的事。。

1 初中物理是不是学过,受力面积小,相应的压力就大~我觉得应该直接趴上去,一定行~反正我也是瞎说的2 不是我吹,换成是我,这包子能吃五屉3 交警蜀黍耐心的领着这位行人过马路,麻烦你快…

.NET 6 中的隐式命名空间引用

.NET 6 中的隐式命名空间引用Intro之前写过一篇隐式命名空间引用的大概介绍,在一些小的测试项目中也有在用,一直没作为示例给大家分享,主要原因在于之前看到了一个关于隐式命名空间引用的 Github issue 提到会有一些破坏性的变更,…

vscode函数跳转插件_人生苦短,我们为 Cocos Creator 开发的插件和工具

在使用 Cocos Creator 开发项目的过程中,为了提高开发效率我们开发了很多扩展插件,本文介绍常用的几款,抛砖引玉,希望给大家带来帮助。腾讯开心鼠英语网页扩展:运行时查看场景节点树Cocos Creator 本地项目通常会在 Ch…

SQLSERVER 日志收缩

SQL2008 的收缩日志 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005)BackupLog DNName with no_loggodumptransaction DNName with no_loggoUSE DNName DBCC SHRINKFILE (2)Go---------------…

压缩JS和CSS常用的工具

前些时候在发现将 JS和CSS压缩一下,的确有好处。在网上找了一下,发现下面的两款工具比较不错。 经过资源(比如 CSS 和 JavaScrip 文件)压缩测试了。 其中一个工具就是 YUI Compressor,一个来自Yahoo! Developer Networ…

php+转义实体字符,PHP针对HTML实体字符的转义函数

htmlspecialchars()转义特别的字符为HTML实体;& (ampersand) becomes & " (double quote) becomes " when ENT_NOQUOTES is not set. (single quote) becomes only when ENT_QUOTES is set. (greater than) becomes >htmlspeci…

解决win7“该文件没有与之关联的程序来执行该操作”

机器装好了win7系统。右击“计算机”管理的时候,出现“该文件没有与之关联的程序来执行该操作”能是因为删除了start menu下的某个文件,经过分析,找到了如下的解决方法:定位到注册表HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\c…

绝不能放进微波炉的10样东西,最后一个太意外

全世界只有3.14 % 的人关注了爆炸吧知识前一阵,网上有一段用微波炉加热葡萄的视频,成了新闻热点。研究员在实验中发现,两颗葡萄放进微波炉后,竟然会产生电弧。图片来源网络之前小编加热汉堡的时候,本来想大快朵颐一顿&…

在 .NET 6 中使用 DATEONLY 和 TIMEONLY

在 .NET 6 中使用 DATEONLY 和 TIMEONLY在 即将发布的.NET 6中,引入了两种期待已久的类型作为核心库的一部分。DateOnly和TimeOnly允许开发人员表示 DateTime 的日期或时间部分。这两种新类型是结构体(值类型),可以在您的代码独立…

vue 3.0 正式版_Vuejs 3 Release:One Piece. Vuejs 3.0 正式版发布!代号:海贼王

Vuejs 3.0 在北京时间2020年9月19日凌晨,终于发布了 3.0 版本,代号:One Piece。此次vue3.0 为用户提供了全新的 composition-api 以及更小的包大小,和更好的 TypeScript 支持。Vue3.0发布链接​github.comVue 是当前非常流行的框架…

i-doIT 0.9.9-7发布 CMDB配置管理数据库

i-doIT是一个基于ITIL技术的CMDB(配置管理数据库)。它能够记载IT系统及其变化,对变化定义了应急方案,以及显示重要信息,并有助于确保一个稳定和高效的IT网络运作。由于其模块化的架构,它可以部署功能性的附…

Linux IPC实践(6) --System V消息队列(3)

消息队列综合案例 消息队列实现回射客户/服务器 server进程接收时, 指定msgtyp为0, 从队首不断接收消息 server进程发送时, 将mtype指定为接收到的client进程的pid client进程发送的时候, mtype指定为自己进程的pid client进程接收时, 需要将msgtyp指定为自己进程的pid, 只接收…

centos 新装mysql 进入,centos5安装 mysql 提示需要用户及密码进入?Duplicate entry 'localhost-' for key 1...

需要用户名及密码,可是新安装的mysql是没有密码的,这是为什么?今天帮朋友试验了一把解决了这个问题:导致这个错误的原因:因为安装系统时设置了hostname为localhost导致mysql在创建表的时候没有创建成功。因此mysql库中…

100斤的铁和100斤女生哪个重?

1 你是不是有别的猫了?-2 兔兔这么可爱我们沾点孜然再吃会更香3 解压的最好方式4 人不如猫系列5 这演技没sei了!!!6 100斤的铁和100斤女生哪个重?7 如果只能选一个,你会选什么你点的每个赞&#xff…

JailbreakMe.com-最新浏览器模式破解iPhones,iPads和iPod Touches方法

一位***建立了该网站(JailbreakMe.com),可以通过浏览器登录的形式破解几乎所有的iOS,这包括了iPhone,iPad,和iPod Touch,将解除Apple对这些设备的软件限制。 用户如果想尝试未经授权的app或者想在多个不同国家使用这些设备,都可以…

localStorage、sessionStorage用法总结

localStorage和sessionStorage一样都是用来存储客户端临时信息的对象。 他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现)。 localStorage生命周期是永久,这意味着除…

谷歌开源3D舞蹈生成模型FACT,舞姿清奇!

文 | 御坂弟弟出品 | OSC开源社区(ID:oschina2013)谷歌开源了其基于 AIST 的 3D 舞蹈生成模型 FACT。该模型不仅可以学习音乐-运动对应关系,还可以生成以音乐为基础的 3D 运动序列。此前,谷歌层发布了大规模的多模态 3…

vue click事件_vue指令用法

vue指令指令式带有 v- 前缀的特殊特性v-text和v-html都属于指令将数据和dom做关联&#xff0c;当表达式的值改变时&#xff0c;响应式地作用在视图解决大胡子语法闪烁案例[v-cloak] {dispaly: none; }一般把v-cloak绑在Vue实例el属性绑定的节点上<!DOCTYPE html> <htm…