学员管理示例——为班级分配老师(多对多)

Posted lujun1028

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学员管理示例——为班级分配老师(多对多)相关的知识,希望对你有一定的参考价值。

一、set_teachers.py文件

from django.shortcuts import render,redirect
from app01 import models


def set_teachers(request):
    if request.method == "GET":
        nid = request.GET.get("nid")  # 获取后可继续传给html文件
        cls_obj = models.Classes.objects.filter(id=nid).first()
        cls_teachers_list = cls_obj.c_to_t.all().values_list("id")
        # 2、先用value_list取出,再用zip函数
        id_list = list(zip(*cls_teachers_list))[0] if list(zip(*cls_teachers_list)) else []
        # 如果if list(zip(*cls_teachers_list))不为空则执行if前语句,为空时执行else语句


        all_teachers_list = models.Teachers.objects.all()
        # [obj,obj,obj]

        # 1、可以直接用Queryset类型里对象判断
        # for i in all_teachers_list:
        #     if i in cls_teachers_list

        return render(request,"set_teachers.html",{
            "cls_teachers_list": cls_teachers_list,
            "all_teachers_list": all_teachers_list,
            "id_list":id_list,
            "nid":nid
        })
    elif request.method == "POST":
        nid = request.GET.get("nid")
        ids = request.POST.getlist("teacher_ids")   # 获取多个值
        obj = models.Classes.objects.filter(id=nid).first()
        obj.c_to_t.set(ids)   # 重置
        return redirect("/classes.html")

  

二、HTML文件操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/set_teachers.html?nid={{nid}}" method="POST">
    {% csrf_token %}
    <select name="teacher_ids" id="" multiple size="10">   {# 设置为多选和大小 #}
        {% for item in all_teachers_list %}   {# 列出所有老师,并通过if判断来默认选择 #}
            {% if item.id in id_list  %}
                <option value="{{item.id}}" selected="selected">{{item.name}}</option>
            {% else %}
                <option value="{{item.id}}" >{{item.name}}</option>
            {% endif %}
        {% endfor %}
    </select>
    <input type="submit" value="提交">
</form>
</body>
</html>

 

 

三、展示的HTML中代码

<td>
    {% for item in row.c_to_t.all %}  {# 执行函数不用加括号,自动加 #}
        <span>{{item.name}}</span>
    {% endfor %}
</td>    

  

总结:

  关键点在于值的传送与获取,一般传ID,因为其唯一性

 

以上是关于学员管理示例——为班级分配老师(多对多)的主要内容,如果未能解决你的问题,请参考以下文章

学员管理系统0x03 老师信息管理功能

ORM版学员管理系统3

ORM版学员管理系统3

python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)

Mysql学生管理系统:表的建立,外键一对多,多对多关系,中间关联表的建立

数据库中多对多关系及其实现