Django前端界面實現級聯查詢
一、前端界面中
<span scope="col" colspan="6">
院系:<select id="dept" name="deptid" class="select radius mr-10" style="width: 20%">
<option value="default" >請選擇院系</option>
{% for dept in deptList %}
{% if deptid == dept.deptid %}
<option value="{{ dept.deptid }}" selected>{{ dept.deptname }}</option>
{% else %}
<option value="{{ dept.deptid }}">{{ dept.deptname }}</option>
{% endif %}
{% endfor %}
</select>
專業:<select id="major" name="majorid" class="select radius mr-10" style="width: 20%">
<option value="default" selected>請選擇專業</option>
{% for major in majorList %}
{% if majorid == major.majorid %}
<option value="{{ major.majorid }}" selected>{{ major.majorname }}</option>
{% else %}
<option value="{{ major.majorid }}">{{ major.majorname }}</option>
{% endif %}
{% endfor %}
</select>
</span>
$(function () {
// 改變院系后
$('#dept').change(function () {
var deptid = $("#dept").val();
// 清空專業
$("#major").empty().append('<option value="default">請選擇專業</option>');
var majorid = $("#major").val();
// 跳轉
window.location.href="{% url 'basic:getGrade' %}?deptid="+deptid+"&majorid="+majorid
});
// 改變專業后
$('#major').change(function () {
var deptid = $("#dept").val();
var majorid = $("#major").val();
// 跳轉
window.location.href="{% url 'basic:getGrade' %}?majorid="+majorid+"&deptid="+deptid
});
})
二、views
def getGrade(request):
'''
獲取到所有的班級信息(級聯查詢,應用分頁)
:param request:
:return:
'''
deptid = request.GET.get('deptid') # 獲取級聯菜單中的院系id
majorid = request.GET.get('majorid') # 獲取級聯菜單中的專業id
current_page = request.GET.get('p', 1)
current_page = int(current_page) # 當前頁
depts = models.TDept.objects.all() # 獲取所有的院系信息
deptList = []
for dept in depts:
major = models.TMajor.objects.filter(dept=dept)
if major:
deptList.append(dept) # 獲取到所有 有專業的 院系信息
majors = []
gradeList = []
if deptid == 'default' or deptid is None and majorid == 'default' or majorid is None: # 級聯菜單無選項時
gradeList = models.TGrade.objects.all().order_by('gradeid')
elif deptid and majorid == 'default':
gradeList = models.TGrade.objects.filter(major__dept__deptid=deptid) # 級聯菜單選擇院系時
majors = models.TMajor.objects.filter(dept=deptid)
elif majorid:
gradeList = models.TGrade.objects.filter(major__majorid=majorid) # 級聯菜單選擇專業時
majors = models.TMajor.objects.filter(dept=deptid)
page_obj = pagination.Page(current_page, len(gradeList)) # 創建分頁對象
data_len = page_obj.data_count # 獲取總數據數量
pages = page_obj.page_pages # 獲取總頁數
data = gradeList[page_obj.start:page_obj.end] # 獲取單頁數據
page_str = page_obj.page_str('/basic/getGrade') # 傳遞base_url
return render(request,'bg/basic/listgrade.html',
{'gradeList':data,'data_len':data_len,'pages':pages,'page_str':page_str,
'current_page':current_page,'deptList':deptList,'majorList':majors,
'deptid':deptid,'majorid':majorid})
