zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    使用MobaXterm远程连接Ubuntu,启动Octave,界面不能正常显示
    ABP .Net Core 日志组件集成使用NLog
    ABP .Net Core Entity Framework迁移使用MySql数据库
    ABP前端使用阿里云angular2 UI框架NG-ZORRO分享
    阿里云 Angular 2 UI框架 NG-ZORRO介绍
    Visual Studio 2019 Window Form 本地打包发布猫腻
    VS Code + NWJS(Node-Webkit)0.14.7 + SQLite3 + Angular6 构建跨平台桌面应用
    ABP .Net Core 调用异步方法抛异常A second operation started on this context before a previous asynchronous operation completed
    ABP .Net Core To Json序列化配置
    .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”
  • 原文地址:https://www.cnblogs.com/wangkun122/p/8298177.html
Copyright © 2011-2022 走看看