现数据库中有四张表格
要求:实现查询功能 页面显示教师 id 姓名 教学班级
url 处设置
url(r'teacher_list/',teacher_list),
teacher_list函数
#连表查询老师和对应的班级 三表联查 def teacher_list(request): #三表联合查询的sql 语句 sql='select teacher.id,teacher.name,class.cname from teacher left join class_2_teacher
on teacher.id=class_2_teacher.tid LEFT join class on class.id=class_2_teacher.cid' #调用mysql查询函数,得到查询结果, 是放大一个字典中的键值对的形式 ret=find_many(sql) print(ret)
#将找到的内容归类为 讲师姓名对应多个课程的 一个字典中 cname_list 中放所教的课程名字放到一个列表中以便于将数据返回给 dic1 = {} #重要函数, for i in ret: if i['id'] not in dic1: dic1[i['id']]={'id':i['id'],'name':i['name'],'cname_list':[i['cname'],]} else: dic1[i['id']]['cname_list'].append(i['cname'])
print(dic1)
#得到数据如下
#取出里边的内容 ret2=list(dic1.values())
print(ret2)
#将信息返回给teacher_list中去让他在网页上打印出相应信息
return render(request,'teacher_list.html',{'teacher_list':ret2})
HTML中的写法
<tbody> #for循环取出传过来的的列表中的数据 {% for teacher in teacher_list %} <tr> #数据序号,forloop.counter 代表从序号1 开始 <td>{{ forloop.counter }}</td> #教师id <td scope="row">{{ teacher.id }}</td> #教师姓名 <td>{{ teacher.name }}</td> #教授课程 <td> #因为教授的课程为多们,需要在 cname_list中循环取出数据 {% for class in teacher.cname_list %} #如果是最后一门课则不加逗号 {% if forloop.last %} {{ class }} #课程数据以逗号相隔 {% else %} {{ class }}, {% endif %} {% endfor %}
</tbody>
得到的网页效果
添加老师功能:
注意点:
1.添加功能的应该有当前开讲课程所有数据,并支持多选
2.添加教师,先添加教师基本信息(姓名) 到cteacher表中
3.再将教师以及选择的课程 以 tid 对应 cid的形式放到 class_2_teacher表中 ,最后在返回查询教师和课程表格
添加教师函数
#添加老师功能 def add_teacher(request): #添加好新的老师时,当提交的时候 if request.method=='POST': #先获得这个老师的名字 tname=request.POST.get('tname') print(tname) # 在获得选择的班级序号,以用于去更新 class_2_teacher表格 #Django恰好有将所有的选择的序号放到例表中的方法 .getlist() cid_list=request.POST.getlist('cid') print(cid_list) #将新的老师先添加到教师表中 sql1='insert into teacher(name) VALUES(%s);' #返回新加的老师的id new_id =db.tianjia(sql1,tname) print(new_id) #在去class_2_teacher表格中去将内容添加上去, #pymsql 支持批量处理添加的功能, 将要添加的内容放到一个列表中 #[(tid,cid),(tid,cid),(tid,cid)] sql2='insert into class_2_teacher (tid,cid)VALUES (%s,%s)' li=[] for i in cid_list: #通过列表表达式将 老师 tid,cid 放到列表中去 toadd=list((new_id,x) for x in cid_list) print(toadd) #执行添加多条的函数 tianjiamay(sql2,toadd) #返回teacher_list网页 return redirect('/teacher_list/') #先查询当前都有哪些班级是可以选的 sql='select id,cname from class' #将查询的结果字典放到字典用一起传过去 ret=find_many(sql) # 开始的时候,将添加的页面返回给用户 return render(request,'add_teacher.html',{'class_list':ret})
添加教师网页
<form action="/add_teacher/" method="post"> <span>教师姓名</span> <input type="text" name="tname" > <span>班级</span> <select name="cid" id="" multiple> #添加教师表格,这里需要将所有的班级放到这 选择框中,以供选择, {% for class in class_list %} <option value={{ class.id }} >{{ class.cname }}</option> {% endfor %} </select> <input type="submit"> </form>