学员管理系统——之老师管理

老师管理

老师表结构

class Teacher(models.Model):
    name = models.CharField(max_length=32)
    classes = models.ManyToManyField('Classes')

查询老师

URL设计:

urls.py的urlpatterns列表中增加如下url:

    url(r'^teacher_list/', views.teacher_list, name='teacher_list'),

视图函数:

def teacher_list(request):
    teacher_obj_list = models.Teacher.objects.all()
    return render(request, 'teacher_list.html', {'list': teacher_obj_list})

teacher_list.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>列表展示</title>
</head>
<body>
<div>
    <table border="1">
        <thead>
        <tr>
            <th>序号</th>
            <th>老师姓名</th>
            <th>所教班级</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        {% for obj in list %}
            <tr>
                <th>{{ obj.id }}</th>
                <td>{{ obj.name }}</td>
                <td>
                    {% for class in obj.classes.all %}
                        <{{ class.name }}>
                    {% endfor %}
                </td>
                <td>
                    <a href="/edit_teacher/?id={{ obj.id }}">编辑</a> |
                    <a href="/del_teacher/?id={{ obj.id }}">删除</a>
                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
</div>
</body>
</html>

新增老师

URL设计:

    url(r'^add_teacher/', views.add_teacher, name='add_teacher'),

视图函数:

def add_teacher(request):
    error_msg = ''
    class_obj_list = models.Classes.objects.all()
    if request.method == 'POST':
        teacher_name = request.POST.get('teacher')
        class_ids = request.POST.getlist('class_ids')
        if teacher_name:
            new_teacher_obj = models.Teacher.objects.create(name=teacher_name)
            new_teacher_obj.classes.set(class_ids)
            return redirect('/teacher_list/')
        else:
            error_msg = '老师姓名不能为空,请重新输入'
    return render(request, 'add_teacher.html', {'list': class_obj_list, 'error_msg': error_msg})

add_teacher.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>增加老师</title>
</head>
<body>
<div style="margin-top: 30px">
    <form action="" method="post">
        <p>
            <label for="teacher">老师姓名:</label>
            <input type="text" id="teacher" name="teacher">
        </p>
        <p>
            <label for="class">所教班级:</label>
            <select name="class_ids" id="class" multiple>
                {% for class in list %}
                    <option value="{{ class.id }}">{{ class.name }}</option>
                {% endfor %}
            </select>
        </p>
        <p>
            <button type="submit">提交</button>
        </p>
    </form>
    {% if error_msg %}
        <p style="color: red">{{ error_msg }}</p>
    {% endif %}
</div>
</body>
</html>

注意:

提交POST请求前注释掉settings.py文件中45行上下的 'django.middleware.csrf.CsrfViewMiddleware', 

或者在HTML代码的form标签内加上 {% csrf_token %}的标签。二者选一即可提交POST请求。

另:可在teacher_list.html的代码中添加一个a标签: <a href="/add_teacher/">新页面添加</a> 

删除老师

URL设计:

    url(r'^del_teacher/', views.del_teacher, name='del_teacher'),

视图函数:

def del_teacher(request):
    teacher_id = request.GET.get('id')
    del_list = models.Teacher.objects.filter(id=teacher_id)
    if del_list:
        del_list.delete()
        return redirect('/teacher_list/')
    else:
        return HttpResponse('删除错误')

HTML部分:

在老师列表的表格中添加删除的a标签。

<a href="/del_teacher/?id={{ obj.id }}">删除</a>

编辑老师

URL设计:

    url(r'^edit_teacher/', views.edit_teacher, name='edit_teacher'),

视图函数:

def edit_teacher(request):
    teacher_id = request.GET.get('id')
    error_msg = ''
    teacher_obj = models.Teacher.objects.filter(id=teacher_id).first()
    classes_list = models.Classes.objects.all()
    if request.method == 'POST':
        teacher_name = request.POST.get('teacher_name')
        class_ids = request.POST.getlist('class_ids')
        if teacher_name:
            teacher_obj.name = teacher_name
            teacher_obj.classes.set(class_ids)
            teacher_obj.save()
            return redirect('/teacher_list/')
        else:
            error_msg = '老师姓名不能为空,请重新输入'
    return render(request, 'edit_teacher.html',
                  {'teacher_obj': teacher_obj, 'classes_list': classes_list, 'error_msg': error_msg})

HTML部分:

在老师列表的表格中添加编辑的a标签。

<a href="/edit_teacher/?id={{ obj.id }}">编辑</a>

 edit_teacher.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>修改老师</title>
</head>
<body>
<div style="margin-top: 30px">
    <form action="" method="post">
        <p>
            <label for="teacher">老师姓名:</label>
            <input type="text" id="teacher" name="teacher_name" value="{{ teacher_obj.name }}">
        </p>
        <p>
            <label for="class">所教班级:</label>
            <select name="class_ids" id="class" multiple>
                {% for class in classes_list %}
                    {% if class in teacher_obj.classes.all %}
                        <option selected value="{{ class.id }}">{{ class.name }}</option>
                    {% else %}
                        <option value="{{ class.id }}">{{ class.name }}</option>
                    {% endif %}
                {% endfor %}
            </select>
        </p>
        <p>
            <button type="submit">提交</button>
        </p>
    </form>
    {% if error_msg %}
        <p style="color: red">{{ error_msg }}</p>
    {% endif %}
</div>
</body>
</html>

  

  

posted @ 2018-07-18 17:01  maple-shaw  阅读(553)  评论(0)    收藏  举报