刚自学了python不长时间, 也没怎么用起来,今天闲着没事干,结合layui实现了一个三级联动的问题
之前写过一个纯js(jquery)的,省市县都是自己写好的(json),然后根据change的改变来加载下一级或下两级
今天我写的是存在数据库中, 方法和上基本相同
数据库的设计
village: 地区
location: 地区对应的各个位置
说明: 每个区我也只找了几个而已, 不全
views加载页面的代码:
def zhiding_views(request):
if 'isLogin' in request.session:
#-------核心代码就两行
villages = Village.objects.all()
return render(request, 'zhiding.html', locals())
#-------
else:
return render(request, 'error.html')
<form action="" class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">地区label>
<div class="layui-input-block">
<select name="village" lay-filter="village" lay-verify="required" lay-search>
<option value="">option>
{% for village in villages %}
<option value="{{ village.id }}">{{ village.vname }}option>
{% endfor %}
select>
div>
div>
<div class="layui-form-item">
<label class="layui-form-label">位置label>
<div class="layui-input-block">
<select name="location" id="location" lay-filter="location" lay-verify="required" lay-search>
<option value="">option>
select>
div>
div>
.....
form>
...
<script>
layui.use(['layer', 'jquery', 'form'], function() {
var layer = layui.layer,
$ = layui.jquery,
form = layui.form; // 不写下拉框加载不出来
});
script>
以上是让我们看到页面, 并且页面当中已经加载了地区
现在我们要做的就是通过选择地区, 改变位置
思路:
获取地区的值(直接layui)
form.on('select(village)', function (data) {
if(data.value != ''){
console.log(data.value); // 打印获取到的值----地区value值
location(data.value); // 调用location方法,参数是获取到的地区value值
}
});
location方法,我们让他执行ajax提交数据到后台, 并将返回的数据进行渲染
function location(village){
var url = '/ajax-location/'; // 处理地址 url
var data = {'village_id': village}; // 提交到后天的数据--地区value值--地区 id
$.ajax({
type: 'post',
url: url,
data: data,
dataType: 'json',
success: function (data) {
var html = ''; // 将下拉框清空重新填写新的内容
$.each(data, function (key, obj) { // each便利django返回的json数据,并用拼接字符串的形式动态加载到下拉框
html += ' + obj.fields['lname'] +''
});
$('[name=location]').html(html);
// -----① 见下方说明处
form.render('select'); // 重新渲染
// -----
}
});
}
url
url('^ajax-location/$', locationValue_views),
后台接收数据,返回数据:
@csrf_exempt
def locationValue_views(request):
village_id = request.POST.get('village_id') # 接收ajax提交的数据--地区 id
locations = Location.objects.filter(villageLocation_id=village_id) # 根据地区id查询所对应的location
# -----② 见下方说明处
data = serializers.serialize('json', locations) # 将locations打包成成json格式
return HttpResponse(data)
说明
① 使用layui来重新渲染一定要加form.render()这句话,其次是放在什么位置比较合适?
我们在ajax中动态添加完数据后直接渲染就行了
② serializers 可导入 from django.core import serializers
额…好像结束了