博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORM版学员管理系统3
阅读量:5146 次
发布时间:2019-06-13

本文共 5054 字,大约阅读时间需要 16 分钟。

老师信息管理

思考

三种方式创建多对多外键方式及其优缺点。

通过外键创建

class Class(models.Model):    id = models.AutoField(primary_key=True)  # 主键    cname = models.CharField(max_length=32)  # 班级名称    first_day = models.DateField()  # 开班时间class Teacher(models.Model):    tname = models.CharField(max_length=32)# 自定义第三张表,通过外键关联上面两张表class Teacher2Class(models.Model):    teacher = models.ForeignKey(to="Teacher")    the_class = models.ForeignKey(to="Class")    class Meta:        unique_together = ("teacher", "the_class")

通过ManyToManyField创建

class Class(models.Model):    id = models.AutoField(primary_key=True)  # 主键    cname = models.CharField(max_length=32)  # 班级名称    first_day = models.DateField()  # 开班时间class Teacher(models.Model):    tname = models.CharField(max_length=32)    # 通过ManyToManyField自动创建第三张表    cid = models.ManyToManyField(to="Class", related_name="teachers")

通过外键和ManyToManyField创建

class Class(models.Model):    id = models.AutoField(primary_key=True)  # 主键    cname = models.CharField(max_length=32)  # 班级名称    first_day = models.DateField()  # 开班时间class Teacher(models.Model):    tname = models.CharField(max_length=32)    # 通过ManyToManyField和手动创建第三张表    cid = models.ManyToManyField(to="Class", through="Teacher2Class", through_fields=("teacher", "the_class"))class Teacher2Class(models.Model):    teacher = models.ForeignKey(to="Teacher")    the_class = models.ForeignKey(to="Class")    class Meta:        unique_together = ("teacher", "the_class")

表结构设计

class Teacher(models.Model):    tname = models.CharField(max_length=32)    cid = models.ManyToManyField(to="Class", related_name="teachers")

老师信息列表

URL部分

url(r'^teacher_list/$', app01_views.teacher_list, name="teacher_list"),

视图部分

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

前端部分

  
老师信息页面添加新老师
{% for teacher in teacher_list %}
{% endfor %}
# id 老师姓名 授课班级 操作
{
{ forloop.counter }}
{
{ teacher.id }}
{
{ teacher.tname }}
{% for class in teacher.cid.all %} {% if forloop.last %} {
{ class.cname }} {% else %} {
{ class.cname }}, {% endif %} {% endfor %}
删除 编辑

删除老师信息

URL部分

url(r'^delete_teacher/(?P
\d+)$', app01_views.delete_teacher, name="delete_teacher"),

视图部分

def delete_teacher(request, tid):    models.Teacher.objects.filter(id=tid).delete()    return redirect(reverse("teacher_list"))

前端部分

在老师列表页面添加一个删除的链接。

添加老师信息

URL部分 

url(r'^add_teacher/$', app01_views.add_teacher, name="add_teacher"),

视图部分

def add_teacher(request):    if request.method == "POST":        tname = request.POST.get("tname")        class_ids = request.POST.getlist("class_id")        new_teacher = models.Teacher.objects.create(tname=tname)        # 查询出所有被选中的班级信息        class_objs = models.Class.objects.filter(id__in=class_ids)        # 将老师的授课班级设置为选中的班级, 以下四种都可以,注意什么时候加*        new_teacher.cid.set(class_objs)        # new_teacher.cid.add(*class_objs)        # new_teacher.cid.add(*class_ids)        # new_teacher.cid.set(class_ids)        new_teacher.save()        return redirect(reverse("teacher_list"))    class_list = models.Class.objects.all()    return render(request, "add_teacher.html", {"class_list": class_list})

前端部分

  
添加老师
{% csrf_token %}

老师姓名:

编辑老师信息

URL部分

url(r'^edit_teacher/(?P
\d+)$', app01_views.edit_teacher, name="edit_teacher"),

视图部分

def edit_teacher(request, tid):    teacher_obj = models.Teacher.objects.get(id=tid)    class_list = models.Class.objects.all()    if request.method == "POST":        tname = request.POST.get("tname")        class_ids = request.POST.getlist("class_id")        # 更新老师相关信息        teacher_obj.tname = tname        teacher_obj.cid.set(class_ids)        teacher_obj.save()  # 一定记得更新完要保存        return redirect(reverse("teacher_list"))    return render(request, "edit_teacher.html", {"class_list": class_list, "teacher": teacher_obj})

前端部分

  
编辑老师信息
{% csrf_token %}

老师姓名:

多对多操作

正向查询(由老师表查询班级表)

>>> teacher_obj = models.Teacher.objects.first()>>> teacher_obj.cid.all()  # 查询该老师授课的所有班级
,
]>

反向查询(由班级表反向查询老师表)

>>> class_obj = models.Class.objects.first()>>> class_obj.teachers.all()  # 此处用到的是related_name,如果不设置的话就用默认的表名_set
,
,
]> 

转载于:https://www.cnblogs.com/yzh2857/p/9915736.html

你可能感兴趣的文章
sublime3
查看>>
Exception Type: IntegrityError 数据完整性错误
查看>>
Nuget:Newtonsoft.Json
查看>>
Hdu - 1002 - A + B Problem II
查看>>
每天CookBook之Python-003
查看>>
Android设置Gmail邮箱
查看>>
js编写时间选择框
查看>>
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
Attributes.Add用途与用法
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>