我和老婆的遭遇,飘渺神之旅续,夺命双头鲨国语
如图,即实现点击一个城市,出现对应的学校名称。开始一直以为是建立数据表的时候实现的,原来是通过ajax实现的。
思路:当get请求显示原始状态(即下拉框呈现全部内容)。当点击一个城市后,通过ajax的post方式提交,然后后端返回筛选的数据到前端,然后js先将所有的学校标签删除,创建后端传过来的学校标签
views.py
class indexview(view):
def get(self,request):
citys = city.objects.all()
schools = school.objects.all()
return render(request,'',{
'citys':citys,
'schools':schools,
})
def post(self,request):
selectcity = request.post.get('selectval')
schools = city.objects.get(name=selectcity).school_set.all()
schoollists = [ obj.name for obj in schools]
schooldict = dict(zip(schoollists,schoollists))
print(schoollists)
return httpresponse(json.dumps(schooldict))
前端
$("#city ul li").on('click',function () {
var selectval = $(this).text();
$("#city button:first").text(selectval);
$.ajax({
type:'post',
url:"{% url 'index' %}",
data:{'selectval':selectval},
success:function(data) {
var len = $("#school li a").length;
for(var i=0;i<len;i++){
$("#school li a").eq(0).remove();
}
ret = json.parse(data);
for (var obj in ret) {
$("#school ul").append("<li><a>"+ obj +"</a></li>");
}
}
})
});
前端的html文件直接是bootstrap的,大致是
<div id="school" class="dropdown" style="float:left;margin-left:100px">
<button id="i1" class="btn btn-default dropdown-toggle" type="button" id="dropdownmenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
学校
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownmenu1">
{% for obj in schools %}
<li><a href="#" data-value="{{ obj.name }}">{{ obj.name }}</a></li>
{% endfor %}
</ul>
</div>
</div>
这样,就能选择了。
难点就是如何在注册的model中引入自定义的js文件。
models.py
class student(models.model):
name = models.charfield(max_length=10,verbose_name=u'姓名',null=true,blank=true)
school = models.foreignkey(school,verbose_name=u'学生所在学校',null=true,blank=true)
city = models.foreignkey(city,verbose_name=u'学生所在城市',null=true,blank=true)
class meta:
verbose_name = u'学生'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
自定义的xadmin.js(名字随便取)文件,放入extra_app/xadmin/static/xadmin/js 中,然后在extra_app/xadmin/widgets.py中添加自定义的xadmin.js文件中。js的id_city和id_school从页面中找到
$('#id_city').change(function () {
var module = $('#id_city').find('option:selected').val(); //获取父级选中值
$('#id_school')[0].selectize.clearoptions();// 清空子级
$.ajax({
type: 'get',
url: '/select/city_school/?module=' + module,
data: '',
async: true,
beforesend: function (xhr, settings) {
xhr.setrequestheader('x-csrftoken', '{{ csrf_token }}')
},
success: function (data) {
data = json.parse(data.schools)//将json转换
console.log(data);
for (var i = 0; i < data.length; i++) {
var test = {text: data[i].fields.name, value: data[i].pk, $order: i + 1}; //遍历数据,拼凑出selectize需要的格式
console.log(test);
$('#id_school')[0].selectize.addoption(test); //添加数据
}
},
error: function (xhr, textstatus) {
console.log('error')
}
})
})
接下来,视图函数
urlpatterns = [
url(r'select/city_school/',selectview.as_view(),name='city_school'),
]
from django.core import serializers
class selectview(view):
def get(self,request):
print("asd")
city_id = request.get.get('module','')
schools = serializers.serialize("json", school.objects.filter(school_city_id=int(city_id)))
print(schools)
# 判断是否存在,输出
if schools:
return jsonresponse({'schools': schools})
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python 实现将numpy中的nan和inf,nan替换成对应的均值
python爬虫把url链接编码成gbk2312格式过程解析
网友评论