Django-Admin中使⽤⼆级联动
Admin中使⽤⼆级联动
参考:
默认的django会⾃动根据我们定义的模型⽣成form给admin使⽤,使⽤到这个form的地⽅分别是change和add的时候。
最终⽣成的结果就是可以选择所有的省,也可以选择所有的市,这并不合理,正确的应该是在选择某个省的时候在市的下拉列表⾥只有该省的城市。
⽽,django原⽣并不能做到这么智能。下⾯介绍⼀下实现⽅法:
(1)admin.py
1 2 3class RecordAdmin(admin.ModelAdmin):
change_form_template ='admin/extras/record_change_form.html' ...
使⽤change_form_template 重置 change_form所使⽤得模版(2)在上⼀步配置的路径下新建html⽂
件 record_change_form.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31{% extends "admin/change_form.html" %}
{% load i18n admin_urls static admin_modify %}
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
<script>
django.jQuery(function() {
var select = django.jQuery("#id_machine_room_id");
console.log(select);
select.change(function(){
{# console.log("value change"+django.jQuery(this).val());#}
var url = "/report/sub_servers/"+django.jQuery(this).val();//能够正确的访问到view的url {# console.log(url);#}
(
url,
function(data){
var target = django.jQuery("#id_server_ip_id");
data.forEach(function(e){
// 将从view得到的id和db_user名称赋值给db_server的select
console.log(e,e.id,e.name);
target.append("<option value='"+e.id+"'>"+e.name+"<option>");
target.eq(0).attr('selected', 'true');
});
})
});
});
</script>
{#{{ media }}#}
{% endblock %}
注意:1.继承change_form.html 2.设计好url
(3)在urls.py中添加⼀条对应的url urls.pydjango admin 自定义页面
1 2 3 4 5 6 f.urls import url
from hys_operation import views
urlpatterns =[
# url(r'^sub_users/(?P<obj_id>\d+)', _sub_users), url(r'^sub_servers/(?P<obj_id>\d+)', _sub_servers), ]
(4)创建views函数
1 2 3 4 5 6 7 8 9def get_sub_servers(request, obj_id):
# 查此机房id下的ip
servers =MachineInfo.objects.filter(idc=obj_id)
result =[]
for i in servers:
# 对应的id和ip组成⼀个字典
result.append({'id': i.id, 'name': i.machine_ip})
# 返回json数据
return HttpResponse(json.dumps(result), content_type="application/json")
返回值就是过滤后的值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论