老师管理
老师表结构
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>