maple-shaw

老师管理

老师表结构

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>

  

  

分类:

技术点:

相关文章: