多对多作为外键,getset方法实现
Posted wfl9310
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多对多作为外键,getset方法实现相关的知识,希望对你有一定的参考价值。
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>
以上是关于多对多作为外键,getset方法实现的主要内容,如果未能解决你的问题,请参考以下文章