Django 之老师讲的教师,班级学生,class_2_teacher四个表格的项目
现数据库中有四张表格
要求:实现查询功能 页面显示教师 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四个表格的项目的更多相关文章
- Python全栈day24(面向对象编程作业作业_定义学校老师课程班级学生类)
面向对象作业 作业_定义学校老师课程班级学生类.py #面向对象编程作业,定义学校老师课程班级学生类 #定义几个类,尽可能定义多的数据属性及函数属性 class School: def __init_ ...
- 使用HashMap编写一程序实现存储某班级学生信息
1. 使用HashMap编写一程序实现存储某班级学生信息,要求在屏幕上打印如下列表 学号 姓名 性别 年龄 001 张三 男 23 002 李四 男 ...
- while循环问题(老师询问问题,学生回答。学生会了可以放学,或者老师讲了10遍,还是没有会的,被迫无奈也要放学。)
string a=""; ;//声明一个变量,老师重新讲课的次数. && a != "yes") { Console.WriteLine(&qu ...
- 陈正冲老师讲c语言之声明和定义的区别
什么是定义?什么是声明?它们有何区别? 举个例子: A)int i; B)extern int i;(关于extern,后面解释) 哪个是定义?哪个是声明?或者都是定义或者都是声明?我所教过的学生几乎 ...
- 陈正冲老师讲c语言之const关键字
1.const 关键字也许该被替换为 readolny const是constant的缩写,是恒定不变的意思,也翻译为常量.常数等.很不幸,正是因为这一点,很多人都认为被const修饰的值是常量.这是 ...
- 陈正冲老师讲c语言之内存的申请malloc() 和释放free()
1.如何使用 malloc 函数 不要莫名其妙,其实上面这段小小的对话,就是malloc的使用过程.malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分 ...
- R_Studio(学生成绩)对两个班级学生成绩进行集合,重新计算学生综合测评成绩并对学生按综合测评成绩进行排名
对成绩表"11_1_1.csv" "11_2_1.csv"进行集成,并重新计算4门课程的平均分为综合测评,增加“排名”属性,并按排名排序 "11_1_ ...
- C++ 结构体+数组+取随机数 案例(打印3名老师 带着 5名学生)结构体
1 //结构体案列 2 3 #include<iostream> 4 #include<string> 5 #include<ctime> 6 using name ...
- 陈正冲老师讲c语言void关键字
1. void a void的字面意思是“空类型”,void *则为“空类型指针”,void *可以指向任何类型的数据. void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量 ...
随机推荐
- 怎样在Ubuntu 14.04中安装Java(转)
想知道如何在Ubuntu 14.04中安装Java?安装Java肯定是安装Ubuntu 14.04后首先要做的几件事情之一(见http://www.linuxidc.com/Linux/2014-04 ...
- SQL-6查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序
题目描述 查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序CREATE TABLE `employees` (`emp_no` int(11) NOT N ...
- springboot学习章节代码-spring基础
1.DI package com.zhen.highlights_spring4.ch1.di; import org.springframework.stereotype.Service; /** ...
- cf467D(map,vector,bfs,特点提取)
D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- <codis><jodis>
Overview For codis and jodis. Codis TBD... Jodis Java client for codis. Jodis is a java client for c ...
- L304 What Is Death?
How should we define the death of a person? Philosophers and physicians have long pondered this ques ...
- 18-10-18 Python 思维导图 很棒的
赠送 14 张 Python 知识点思维导图 来源 | Python学习联盟 本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库). 按顺序依次展示了以下内容的一系列思维导图: ...
- ChinaCock界面控件介绍-TCCImageViewerForm
有多个图片,左右滑动可以切换,通过手势还可以放大.缩小查看,象常见的相册,就是这样子实现效果. 现在,我们有了TCCImageViewerForm组件,也可以轻松实现这样的场景应用. 现在看看TCCI ...
- python-tornado和django优缺点
Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使用起ORM,做简单的定义,就能自动生成数据库结 ...
- python 爬虫newspaper3k 新闻爬去方法 利用第三方库
from newspaper import Article url = '你想要爬取的网站url' news = Article(url, language='zh') news .download( ...