• 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>
  • 相关阅读:
    SELECT SCREEN 整理2 转载
    SELECT SCREEN 整理1 转载
    ABAP面向对象 转载
    [OO]ABAP OO 语法--实例看 "="与"?=" 的区别[转]
    cl_salv_table
    sapui5 组件重用
    sapui5 使用common(其他工程)的i18n 文件
    sapui5 app之间迁移
    导航与路由10-17(渣翻完结)
    导航与路由1-9 (渣翻)
  • 原文地址:https://www.cnblogs.com/wangkun122/p/8298177.html
Copyright © 2020-2023  润新知