多对多作为外键,get\set方法实现

get_class.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div><a href="/add_classes.html">添加</a></div>
<div> <table border="1">
    <thead>
    <tr>
        <th>ID</th>
        <th>名称</th>
        <th>任课老师</th>
        <th>操作</th>
    </tr>
</thead>
    <tbody>
    {% for row in cls_list %}
        <tr>
        <td>{{ row.id }}</td>
        <td>{{ row.title }}</td>
            <td>{% for item in row.m.all %}
                <span>{{ item.name }}</span>
                {% endfor %}</td>
        <td><a href="del_classes.html?nid={{ row.id }}">删除</a>
            |
        <a href="edit_classes.html?nid={{ row.id }}">修改</a>
            |
            <a href="set_teacher.html?nid={{ row.id }}">分配老师</a>
        </td>
        </tr>
    {% endfor %}
    </tbody>
</table></div>
</body>
</html>

url.py

from django.conf.urls import url
from django.contrib import admin
from app.views import classes
from app.views import student
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^classes.html$',classes.get_classes),#不加^访问点击页面没反应
    url(r'^add_classes.html$',classes.add_classes),
    url(r'^del_classes.html$', classes.del_classes),
    url(r'^edit_classes.html$',classes.edit_classes),
    url(r'^set_teacher.html$', classes.set_teacher),

    url(r'^student$', student.get_student),
    url(r'^add_student$', student.add_student),
    url(r'^del_student$', student.del_student),
    url(r'^edit_student$',student.edit_student),

]

class.py

from django.shortcuts import render
from django.shortcuts import redirect
from app import models
def get_classes(request):

    cls_list=models.Classes.objects.all()

    return render(request,'get_classes.html',{'cls_list':cls_list})

def add_classes(request):
    if request.method == 'GET':
        return render(request, 'add_classes.html')
    elif request.method == 'POST':
        title1=request.POST.get("title")
        models.Classes.objects.create(title=title1)
        return redirect('/classes.html')
         #url路径不是html文件

def del_classes(request):
    nid=request.GET.get("nid")
    models.Classes.objects.filter(id=nid).delete()
    return redirect("/classes.html")

def edit_classes(request):
    if request.method=="GET":
        nid=request.GET.get('nid')
        obj=models.Classes.objects.filter(id=nid).first()
        return render(request,'edit_classes.html',{'obj':obj})
    elif request.method=="POST":
        nid = request.GET.get('nid')
        title=request.POST.get('abc')
        models.Classes.objects.filter(id=nid).update(title=title)
        return redirect("/classes.html")
def set_teacher(request):
    if request.method=='GET':
        nid=request.GET.get('nid')
        cls_obj=models.Classes.objects.filter(id=nid).first()
        cls_teacher_list=cls_obj.m.all().values_list('id','name')
        id_list=list(zip(*cls_teacher_list))[0] if list(zip(*cls_teacher_list)) else []
        all_teacher_list=models.Teacheres.objects.all()
        return render(request,'set_teacher.html',
                      {'id_list':id_list,
                       'all_teacher_list':all_teacher_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.m.set(ids)
        return redirect("/classes.html")

set_teacher.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% csrf_token %}
<form action="set_teacher.html?nid={{ nid }}" method="POST">
<select name="teacher_ids" id="" multiple size="10">
{#<select name="" id="">#}
    {% for item in all_teacher_list %}
        {% 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>

 

posted @ 2018-09-02 20:36  未来的技术  阅读(276)  评论(0编辑  收藏  举报