• DJANGO 学生管理系统项目创建流程 -- 一对多管理及多对多管理


    目标,创建学生管理,使学生表格与班级表格连接,一个班级可以创建多个学生

    学生管理页面需要增删改查

     

    1、首先在url中增加

    path('students.html', students.get_students),
    
    path('add_students.html', students.add_students),
    
    path('del_students.html', students.del_students),
    
    path('edit_students.html', students.edit_students),
    urls.py

     

    2、在views文件夹中编辑students.py文件

    from django.shortcuts import render,redirect
    
    from app01 import models
    
     
    
    #查询页面
    
    def get_students(request):
    
        #获取学生表格的id、名字、年龄、性别、班级名称(跨表查询)
    
        stu_lis = models.Students.objects.all().values('id','username','age','gender','cs__title')
    
        return render(request, 'get_students.html', {'stu_lis': stu_lis})
    
     
    
    #增加学生页面
    
    def add_students(request):
    
        #获取班级列表
    
        cls_list = models.Classes.objects.all()
    
        #判断首次进入采用get方式
    
        if request.method == 'GET':
    
            #将班级列表返回至前台
    
            return render(request,'add_students.html', {'cls_list': cls_list})
    
        #判断通过POST方式提交
    
        elif request.method == 'POST':
    
            #从前台获取学生名字、年龄、性别、班级
    
            stu_name = request.POST.get('stu_name')
    
            stu_age = request.POST.get('stu_age')
    
            stu_gender = request.POST.get('stu_gender')
    
            stu_cls = request.POST.get('stu_class')
    
            #将内容更新值数据库中
    
            models.Students.objects.create(username=stu_name,age=stu_age,gender=stu_gender,cs_id=stu_cls)
    
            return redirect('students.html')
    
     
    
    #删除功能
    
    def del_students(request):
    
        #通过前台获取目标学生id编号
    
        sid = request.GET.get('sid')
    
        #操作数据库删除
    
        models.Students.objects.filter(id=sid).delete()
    
        return redirect('students.html')
    
     
    
    #修改功能
    
    def edit_students(request):
    
        cls_list = models.Classes.objects.values('id','title')
    
        if request.method == 'GET':
    
            sid = request.GET.get('sid')
    
            #通过前台获取的学生id编号,获取目标学生的对象信息
    
            stu_one = models.Students.objects.filter(id=sid).first()
    
            return render(request,'edit_students.html',{'stu_one':stu_one,'cls_list':cls_list})
    
        elif request.method == 'POST':
    
            sid = request.GET.get('eid')
    
            # print(sid)
    
            username = request.POST.get('stu_name')
    
            age = request.POST.get('stu_age')
    
            gender = request.POST.get('stu_gender')
    
            cs_id = request.POST.get('stu_class')
    
            # print(username,age,gender,cs_id)
    
            models.Students.objects.filter(id=sid).update(username=username,age=age,gender=gender,cs_id=cs_id)
    
            return redirect('students.html')
    students.py

     

    3、编辑get_students.html

    <body>
    
     
    
    <div>
    
        <a href="/add_students.html">添加</a>
    
        <table border="1">
    
            <thead>
    
                <tr>
    
                    <th>ID</th>
    
                    <th>姓名</th>
    
                    <th>年龄</th>
    
                    <th>性别</th>
    
                    <th>班级</th>
    
                    <th>操作</th>
    
                </tr>
    
            </thead>
    
            <tbody>
    
                {% for row in stu_lis%}
    
                    <tr>
    
                        <td>{{ row.id }}</td>
    
                        <td>{{ row.username }}</td>
    
                        <td>{{ row.age }}</td>
    
                        <td>
    
                            {% if row.gender == 0 %}
    
                                男
    
                            {% elif row.gender == 1 %}
    
                                女
    
                            {% endif %}
    
     
    
                        </td>
    
                        <td>{{ row.cs__title }}</td>
    
                        <td><a href="/del_students.html?sid={{ row.id }}">删除</a>
    
                            |
    
                            <a href="/edit_students.html?sid={{ row.id }}">修改</a>
    
                        </td>
    
                    </tr>
    
                {% endfor %}
    
            </tbody>
    
        </table>
    
    </div>
    
    </body>
    get_students.html

     

     

    4、编辑add_students.html

    <body>
    
    <form action="/add_students.html" method="post">
    
        {% csrf_token %}
    
        <table border="1">
    
            <tr>
    
                <td><input type="text" name="stu_name" />姓名</td>
    
            </tr>
    
            <tr>
    
                <td><input type="text" name="stu_age" />年龄</td>
    
            </tr>
    
            <tr>
    
                <td><input type="radio" name="stu_gender" value="0" />|
    
                    <input type="radio" name="stu_gender" value="1" /></td>
    
            </tr>
    
            <tr>
    
                <td>
    
                    <select name="stu_class">
    
                        {% for row in cls_list %}
    
                            <option value="{{ row.id }}">{{ row.title }}</option>
    
                        {% endfor %}
    
                    </select>
    
                    班级
    
                </td>
    
            </tr>
    
            <tr>
    
                <td><input type="submit" value="提交" /></td>
    
            </tr>
    
        </table>
    
    </form>
    
    </body>
    add_students.html

     

    5、编辑edit_students.html

    <body>
    
    <form action="/edit_students.html?eid={{ stu_one.id }}" method="post">
    
        {% csrf_token %}
    
        <table border="1">
    
            <tr>
    
                <td><input type="text" name="stu_name" value="{{ stu_one.username }}"/>姓名</td>
    
            </tr>
    
            <tr>
    
                <td><input type="text" name="stu_age" value="{{ stu_one.age }}"/>年龄</td>
    
            </tr>
    
            <tr>
    
     
    
                <td><input type="radio" name="stu_gender" value="0"
    
                           {% if stu_one.gender == 0%}
    
                           checked
    
                           {% endif %}
    
                            />|
    
                    <input type="radio" name="stu_gender" value="1"
    
                            {% if stu_one.gender == 1%}
    
                           checked
    
                            {% endif %}
    
                            /></td>
    
     
    
            </tr>
    
            <tr>
    
                <td>
    
                    <select name="stu_class">
    
                        {% for row in cls_list %}
    
                            <option value="{{ row.id }}"
    
                                    {% if stu_one.cs_id == row.id %}
    
                                    selected="selected"
    
                                    {% endif %}
    
                            >{{ row.title }}</option>
    
                        {% endfor %}
    
                    </select>
    
                    班级
    
                </td>
    
            </tr>
    
            <tr>
    
                <td><input type="submit" value="提交" /></td>
    
            </tr>
    
        </table>
    
    </form>
    edit_students.html

    多对多表格,需求是在classes.html中新增老师列,并增加修改老师的功能

     

    1、首先增加urls

    path('set_teachers.html', teachers.set_teachers),

    2、编辑get_classes.html,新增白框中的内容

    3、编辑set_teacher.html

    <body>
    <form action="/set_teachers.html?cid={{ cid }}" method="post">
        {% csrf_token %}
        <select multiple size='10' name="teacher_list" id="">
            {% for item in all_teacher_list %}
            <option value="{{ item.id }}"
                {% if item.id in teacher_id %}
                    selected
                {% endif %}
            >{{ item.name }}</option>
            {% endfor %}
        </select>
        <input type="submit" value="提交">
    </form>
    </body>
    View Code

    老师管理页面,需求:在查询页面显示老师列表,并显示每个老师管理的班级列表,修改时可修改老师姓名及管理班级

    1、首先编辑urls.py

        path('teachers.html', teachers.get_teachers),
        path('add_teachers.html', teachers.add_teachers),
        path('edit_teachers.html', teachers.edit_teachers),
        path('del_teachers.html', teachers.del_teachers),
    View Code

    2、编辑teachers.py

    from django.shortcuts import render, redirect
    from app01 import models
    
    
    def set_teachers(request):
        if request.method == 'GET':
            # 获取前台cid
            cid = request.GET.get('cid')
            # 获取cid的班级对象
            cls_obj = models.Classes.objects.filter(id=cid).first()
            # 通过多对多表格,获取班级对象相关的老师表格,并获取id值
            cls_teacher_list = cls_obj.m.all().values_list('id', 'name')
    
            # 获取结果为[(1,'alex'),(2,'yuan')]这样的格式,可以通过zip的*方式进行解压
            # 获取老师id的列表,【1,2,3】
            # teacher_id = list(zip(*cls_teacher_list))[0]
    
            # 如果对应关系没有建立的时候,查不到结果,会报错误
            # 采用三元运算符 判断list(zip(*cls_teacher_list))是否为True,否则赋值一个空列表
            teacher_id = list(zip(*cls_teacher_list))[0] if list(zip(*cls_teacher_list)) else []
    
            all_teacher_list = models.Teachers.objects.all()
            return render(request,
                          'set_teachers.html',
                          {
                              'all_teacher_list': all_teacher_list,
                              'teacher_id': teacher_id,
                              'cid': cid,
                          })
        elif request.method == 'POST':
            cid = request.GET.get('cid')
            ids = request.POST.getlist('teacher_list')
            # print('当前班级的id',cid,'分配老师的id',ids)
            cls_obj = models.Classes.objects.filter(id=cid).first()
            cls_obj.m.set(ids)
            return redirect('/classes.html')
    
    
    def get_teachers(request):
        teacher_list = models.Teachers.objects.all()
        return render(request, 'get_teachers.html', {'teacher_list': teacher_list})
    
    
    def add_teachers(request):
        if request.method == 'GET':
            cls_list = models.Classes.objects.all()
            return render(request, 'add_teachers.html', {'cls_list': cls_list})
        elif request.method == 'POST':
            name = request.POST.get('teacher_name')
            teacher_class = request.POST.get('teacher_class')
            models.Teachers.objects.create(name=name)
            t_obj = models.Teachers.objects.filter(name=name).first()
            t_obj.sssss.add(teacher_class)
            return redirect('/teachers.html')
    
    
    def edit_teachers(request):
        if request.method == 'GET':
            sid = request.GET.get('sid')
            # print('sid', sid)
            cls_list = models.Classes.objects.all()
            c_l_obj = models.Teachers.objects.filter(id=sid).first()
            s_t_id = c_l_obj.sssss.all().values_list('id', 'title')
            # c_l = models.Classes.objects.all().values_list('id')
            c_list = list(zip(*s_t_id))[0]
            # print(c_list)
            tea_list = models.Teachers.objects.filter(id=sid).first()
            return render(request, 'edit_teachers.html', {
                'cls_list': cls_list,
                'sid': sid,
                'tea_list': tea_list,
                'c_list': c_list
            })
        elif request.method == 'POST':
            name = request.POST.get('teacher_name')
            teacher_class = request.POST.getlist('teacher_class')
            # print(teacher_class)
            t_obj = models.Teachers.objects.filter(name=name).first()
            t_obj.sssss.set(teacher_class)
            return redirect('/teachers.html')
    
    
    def del_teachers(request):
        sid = request.GET.get('sid')
        models.Teachers.objects.filter(id=sid).delete()
        return redirect('/teachers.html')
    View Code

    3、编辑get_teachers.html

    <body>
    
    <div>
        <a href="/add_teachers.html">添加</a>
    </div>
    <div>
        <table border="1">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                    <th>所属班级</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                {% for row in teacher_list %}
                    <tr>
                        <td>
                            {{ row.id }}
                        </td>
                        <td>
                            {{ row.name }}
                        </td>
                        <td>
                            {% for class_teacher in row.sssss.all %}
                                <span>{{ class_teacher.title }}</span>
                            {% endfor %}
                        </td>
                        <td>
                            <a href="/del_teachers.html?sid={{ row.id }}">删除</a>
                            |
                            <a href="/edit_teachers.html?sid={{ row.id }}">编辑</a>
                        </td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>
    </div>
    
    </body>
    View Code

    4、编辑add_teachers.html

    <body>
    
    <form action="/add_teachers.html" method="post">
        {% csrf_token %}
        <p>教师姓名<input type="text" name="teacher_name" value=""></p>
        <p>
        <select name="teacher_class" id="">
            {% for item in cls_list %}
                <option value="{{ item.id }}">{{ item.title }}</option>
            {% endfor %}
        </select>
        </p>
        <input type="submit">
    </form>
    
    
    </body>
    View Code

    5、编辑edit_teachers.html

    <body>
    
    <form action="/edit_teachers.html?sid{{ sid }}" method="post">
        {% csrf_token %}
        <p>教师姓名<input type="text" name="teacher_name" value="{{ tea_list.name }}"></p>
        <p>
        <select multiple size="10" name="teacher_class" id="">
            {% for item in cls_list %}
                <option value="{{ item.id }}"
                    {% if item.id in c_list %}
                    selected
                    {% endif %}
                >{{ item.title }}</option>
            {% endfor %}
        </select>
        </p>
        <input type="submit">
    </form>
    
    
    </body>
    View Code
  • 相关阅读:
    CAD中的各种Polyline
    在CAD二次开发中使用状态条按钮
    在CAD二次开发中使用进度条
    EXSI6.5复制文件太慢的解决方法
    vlan交换机的端口模式有哪几种
    此计算机上的安全设置禁止访问其他域的数据源
    Could not write to output file 'c:WindowsMicrosoft.NET ASP.NET Filesxx' -- 'Access is denied
    添加现有文件夹到项目解决方案
    SSM-MyBatis-18:Mybatis中二级缓存和第三方Ehcache配置
    SSM-MyBatis-17:Mybatis中一级缓存(主要是一级缓存存在性的证明,增删改对一级缓存会造成什么影响)
  • 原文地址:https://www.cnblogs.com/trunkslisa/p/9524824.html
Copyright © 2020-2023  润新知