现数据库中有四张表格

要求:实现查询功能  页面显示教师  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>

Django 之老师讲的教师,班级学生,class_2_teacher四个表格的项目的更多相关文章

  1. Python全栈day24(面向对象编程作业作业_定义学校老师课程班级学生类)

    面向对象作业 作业_定义学校老师课程班级学生类.py #面向对象编程作业,定义学校老师课程班级学生类 #定义几个类,尽可能定义多的数据属性及函数属性 class School: def __init_ ...

  2. 使用HashMap编写一程序实现存储某班级学生信息

    1. 使用HashMap编写一程序实现存储某班级学生信息,要求在屏幕上打印如下列表 学号   姓名   性别   年龄 001    张三   男      23 002    李四   男      ...

  3. while循环问题(老师询问问题,学生回答。学生会了可以放学,或者老师讲了10遍,还是没有会的,被迫无奈也要放学。)

    string a=""; ;//声明一个变量,老师重新讲课的次数. && a != "yes") { Console.WriteLine(&qu ...

  4. 陈正冲老师讲c语言之声明和定义的区别

    什么是定义?什么是声明?它们有何区别? 举个例子: A)int i; B)extern int i;(关于extern,后面解释) 哪个是定义?哪个是声明?或者都是定义或者都是声明?我所教过的学生几乎 ...

  5. 陈正冲老师讲c语言之const关键字

    1.const 关键字也许该被替换为 readolny const是constant的缩写,是恒定不变的意思,也翻译为常量.常数等.很不幸,正是因为这一点,很多人都认为被const修饰的值是常量.这是 ...

  6. 陈正冲老师讲c语言之内存的申请malloc() 和释放free()

    1.如何使用 malloc 函数 不要莫名其妙,其实上面这段小小的对话,就是malloc的使用过程.malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分 ...

  7. R_Studio(学生成绩)对两个班级学生成绩进行集合,重新计算学生综合测评成绩并对学生按综合测评成绩进行排名

    对成绩表"11_1_1.csv" "11_2_1.csv"进行集成,并重新计算4门课程的平均分为综合测评,增加“排名”属性,并按排名排序 "11_1_ ...

  8. C++ 结构体+数组+取随机数 案例(打印3名老师 带着 5名学生)结构体

    1 //结构体案列 2 3 #include<iostream> 4 #include<string> 5 #include<ctime> 6 using name ...

  9. 陈正冲老师讲c语言void关键字

    1. void a void的字面意思是“空类型”,void *则为“空类型指针”,void *可以指向任何类型的数据. void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量 ...

随机推荐

  1. pytorch加载和保存模型

    在模型完成训练后,我们需要将训练好的模型保存为一个文件供测试使用,或者因为一些原因我们需要继续之前的状态训练之前保存的模型,那么如何在PyTorch中保存和恢复模型呢? 方法一(推荐): 第一种方法也 ...

  2. linux系统安装mysql详细配置

    参考文章https://baijiahao.baidu.com/s?id=1584072431498789934&wfr=spider&for=pc https://www.5yun. ...

  3. C语言获取系统时间的几种方式

    C语言获取系统时间的几种方式 2009-07-22 11:18:50|  分类: 编程学习 |字号 订阅     C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * ...

  4. python的list和tuple

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  5. python中的if判断语句

    判断(if)语句 目标 开发中的应用场景 if 语句体验 if 语句进阶 综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?……  ...

  6. nginx随机模块——ngx_http_random_index_module

    今天我给大家分享一个挺好玩的模块,随机变换网站首页的模块 这个模块他的作用于只有在location中,具体写法如下 只需要在localtion开启这个模块就好了,然后呢我们在/usr/share/ng ...

  7. web 架构 /http协议,状态码,django中常用命令

    什么是web应用? web应用 架构 :B/S架构 | C/S架构 网站:BS架构其实就是应用程序: B是浏览器 S是sever(实现了wsgi协议,实现了socket的服务端) + applicat ...

  8. python生产者消费者模型优点

    生产者消费者模型:解耦,通过队列降低耦合,支持并发,生产者和消费者是两个独立的并发体,他们之间使用缓存区作为桥梁连接,生产者指望里丢数据,就可以生产下一个数据了,消费者从中拿数据,这样就不会阻塞,影响 ...

  9. 在Intellij IDEA中修改模板中user变量名称

    在Intellij IDEA中的注释模板中的${user}名称是根据当前操作系统的登录名来取的,有时候登录名称和我们实际的user名称并不相同. 修改方法如下: 方法一:可以在settings的fil ...

  10. HDU1166-敌兵布阵 (线段树)

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)     ...