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>

 

转载于:https://www.cnblogs.com/wangkun122/p/8298177.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值