Django 练习班级管理系统七 -- 编辑老师列表(二)
修改 views.py
@auth
def edit_teacher(request, nid):
if request.method == "GET":
obj = models.Teacher.objects.get(id=nid)
obj_cls_list = obj.cls.all().values_list('id', 'caption')
# 三元运算,如果 obj_cls_list 为 true,则 list(zip(*obj_cls_list))[0],否则为 []
id_list = list(zip(*obj_cls_list))[0] if obj_cls_list else []
# 获取 id 不在 id_list 的值
cls_list = models.Classes.objects.exclude(id__in=id_list)
return render(request, 'edit_teacher.html', {'obj': obj,
'id_list': id_list,
'cls_list': cls_list,
'obj_cls_list': obj_cls_list})
elif request.method == "POST":
name = request.POST.get('name')
cls_li = request.POST.getlist('cls')
obj = models.Teacher.objects.get(id=nid)
obj.name = name
obj.save()
obj.cls.set(cls_li)
return redirect('/teacher.html')
修改 edit_teacher.html
{% extends "layout.html" %}
{% block css %}
{% endblock %}
{% block content %}
<h1>编辑老师</h1>
<form action="/edit_teacher-{{ obj.id }}.html" method="POST">
<input style="display: none" type="text" id="nid" value="{{ obj.id }}" />
<p>
老师姓名: <input type="text" name="name" value="{{ obj.name }}" />
</p>
<p>
已管理班级:
<select id="sel" name="cls" multiple>
<!-- obj_cls_list 可能取的值:<QuerySet [(2, '全栈二班'), (118, '全栈一班101'), (119, '全栈6班1'), (120, '全栈一班77')]> -->
{% for row in obj_cls_list %}
<option value="{{ row.0 }}">{{ row.1 }}</option>
{% endfor %}
</select>
未管理班级:
<select id="none" multiple>
<!-- cls_list 可能取的值:<QuerySet [<Classes: Classes object (1)>, <Classes: Classes object (3)>..... -->
{% for row in cls_list %}
<option value="{{ row.id }}">{{ row.caption }}</option>
{% endfor %}
</select>
</p>
<div>
<a id="removeCls"> >> </a>
<a id="addCls"> << </a>
</div>
<input id="submit_form" type="submit" value="提交">
</form>
{% endblock %}
{% block js %}
<script>
$(function () {
$('#menu_teacher').addClass('active');
bindRemoveCls();
bindAddCls();
bindSubmitForm();
})
function bindRemoveCls() {
$('#removeCls').click(function () {
// 获取 DOM 对象
var options = $('#sel')[0].selectedOptions;
console.log(options)
while (options.length>0){
// 获取 jQuery 对象
$(options[0]).appendTo('#none');
}
})
}
function bindAddCls() {
$('#addCls').click(function () {
var options = $('#none')[0].selectedOptions;
while (options.length>0){
$(options[0]).appendTo('#sel');
}
})
}
function bindSubmitForm() {
$('#submit_form').click(function () {
// 让 select 全选中
// each() 方法规定为每个匹配元素规定运行的函数。
$('#sel').children().each(function () {
// prop() 方法设置或返回被选元素的属性和值。
$(this).prop('selected', true)
})
})
}
</script>
{% endblock %}


Django 练习班级管理系统七 -- 编辑老师列表(二)的更多相关文章
- Django 练习班级管理系统六 -- 编辑老师列表
修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...
- Django 练习班级管理系统五 -- 查看老师列表
models.py 对应的配置 class Classes(models.Model): caption = models.CharField(max_length=32) class Teacher ...
- Django 练习班级管理系统四 -- 编辑班级
修改 classes.html {% extends "layout.html" %} {% block css %} {% endblock %} {% block conten ...
- Django 练习班级管理系统二 -- 添加班级数据
在上一篇中(Django 练习班级管理系统一 https://www.cnblogs.com/klvchen/p/11078174.html),使用的是莫泰对话框的方式提交数据,适用于数据量少的操作. ...
- Django 练习班级管理系统三 -- 分页
在 user_manager 项目下创建一个 python package:utils,里面创建一个 page.py 文件 page.py 文件内容为: # 创建一个 PagerHelper 类 cl ...
- Django 练习班级管理系统八 -- 上传文件
Form表单上传文件 修改 views.py import os def upload(request): if request.method == 'GET': img_list = models. ...
- Django pymysql学员管理系统
学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...
- 【学员管理系统】0x03 老师信息管理功能
[学员管理系统]0x03 老师信息管理功能 老师信息管理相比于学生信息管理又多了一点,因为我们的数据结构中老师表和班级表是通过teacher2class表进行多对多关联的. 写在前面 项目详细需求参见 ...
- 11 基于django的图书管理系统 多表
1.需求 作业需求:1.列出图书列表.出版社列表.作者列表2.点击作者,会列出其出版的图书列表3.点击出版社,会列出旗下图书列表4.可以创建.修改.删除 图书.作者.出版社 踩分点:1.满足需求1,2 ...
随机推荐
- MYSQL第一课
rm-rf /* 不能用 完全删除 数据库不能直接存储数据 table 表 DB 数据库 DBMS 数据库操作系统 SQL 结构化查询语言 语句不区分大小写,但字符串常量区区分大小写.建议命令大写. ...
- fiddler---Fiddler修改数据信息
在测试的过程中,可能我们会遇到需要修改一些数据查看请求返回内容是如何的,刚好Fiddler也可以满足我们的要求,Fiddler不仅可以抓包还可以修改包的内容 Fiddler修改数据原理 Fiddler ...
- 用arthas查看JVM已加载的类及方法信息
1.sc:“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 [d].[E].[f] 和 [x:]. [d] 输出当前类的详细信 ...
- PyCharm工具配置和快捷键使用
PyCharm是一款高效开发Python程序的IDE,包含有自动联想.语法高亮.代码调试.管理多个版本Python解释器等功能.本文主要描述Python界面个性化定制方法(字体.颜色配置).常用配置和 ...
- linux操作系统 - 综合习题
登录超级用户,完成以下操作: [linux@slave053 ~]$ su - 1.用户和组群管理(本大题共5小题,共10分) (1)创建两个用户tangseng,monkey,并指定密码为12345 ...
- 在ASP.Net Core 中使用枚举类而不是枚举
前言:我相信大家在编写代码时经常会遇到各种状态值,而且为了避免硬编码和代码中出现魔法数,通常我们都会定义一个枚举,来表示各种状态值,直到我看到Java中这样使用枚举,我再想C# 中可不可以这样写,今天 ...
- python运维开发常用模块(6)发送电子邮件模块smtplib
1.模块常用方法 SMTP类定义:smtplib.SMTP([host[,port[,local_hostname[, timeout]]]]),作为SMTP的构造函数,功能是与smtp服务器建立连接 ...
- 编写antd配置表单组件
编写antd配置表单组件 整体思路 抽取formitem的配置数组:包含组件类型.名称.label名称,相关的opts和扩展的opts,传递进入组件 组件通过Form.create()进行表单创建,能 ...
- 2019.11.21 做OJ题的反思
1.利用二分法查找数组元素(适用于有序数组) #include<stdio.h> int BinarySearch(int a[],int n,int key); ]; int main( ...
- argparse.ArgumentParser()用法解析
本博客主要本人学习记录用. 内容来源 于博客:https://blog.csdn.net/the_time_runner/article/details/97941409 argparse模块官方文档 ...