一、无法动态更新数据的实例
1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为“多对多”
from django.db import modelsclass Classes(models.Model): title = models.CharField(max_length=32)class Teacher(models.Model): name = models.CharField(max_length=32) t2c = models.ManyToManyField(Classes)
2. views的功能有查看、添加、编辑班级或教师表
from django.shortcuts import render, redirectfrom school import modelsfrom django.forms import Form, fields, widgets#班级表单验证规则class ClsForm(Form): title = fields.RegexField('老男孩', error_messages={'invalid': '请以 老男孩 开头'})#教师表单验证规则class TchForm(Form): name = fields.CharField(max_length=16, min_length=2, widget=widgets.TextInput(attrs={'class': 'form-control'})) t2c = fields.MultipleChoiceField( choices=models.Classes.objects.values_list('id', 'title'), widget=widgets.SelectMultiple(attrs={'class': 'form-control'}) )#查看班级列表def classes(request): cls_list = models.Classes.objects.all() return render(request, 'classes.html', {'cls_list': cls_list})#查看教师列表def teachers(request): tch_list = models.Teacher.objects.all() return render(request, 'teachers.html', {'tch_list': tch_list})#添加班级def add_cls(request): if request.method == 'GET': obj = ClsForm() return render(request, 'add_classes.html', {'obj': obj}) else: obj = ClsForm(request.POST) if obj.is_valid(): models.Classes.objects.create(**obj.cleaned_data) return redirect('/school/classes/') return render(request, 'add_classes.html', {'obj': obj})#添加教师def add_tch(request): if request.method == 'GET': obj = TchForm() return render(request, 'add_teacher.html', {'obj': obj}) else: obj = TchForm(request.POST) if obj.is_valid(): tc = obj.cleaned_data.pop('t2c') # 获取教师任课班级id tch_obj = models.Teacher.objects.create(name=obj.cleaned_data['name']) # 添加新教师姓名 tch_obj.t2c.add(*tc) # 添加新教师任课班级 return redirect('/school/teachers/') return render(request, 'add_teacher.html', {'obj': obj})#编辑班级def edit_cls(request, nid): if request.method == 'GET': cls = models.Classes.objects.filter(id=nid).first() obj = ClsForm(initial={'title': cls.title}) return render(request, 'edit_classes.html', {'nid': nid, 'obj': obj}) else: obj = ClsForm(request.POST) if obj.is_valid(): models.Classes.objects.filter(id=nid).update(**obj.cleaned_data) return redirect('/school/classes/') return render(request, 'edit_classes.html', {'nid': nid, 'obj': obj})#编辑教师def edit_tch(request, nid): if request.method == 'GET': tch = models.Teacher.objects.filter(id=nid).first() v = tch.t2c.values_list('id') # 获取该教师任课班级的id cls_ids = list(zip(*v))[0] if list(zip(*v)) else [] # 格式化为列表类型 obj = TchForm(initial={'name': tch.name, 't2c': cls_ids}) return render(request, 'edit_teacher.html', {'nid': nid, 'obj': obj}) else: obj = TchForm(request.POST) if obj.is_valid(): tc = obj.cleaned_data.pop('t2c') # 获取修改后的任课班级id # models.Teacher.objects.filter(id=nid).update(name=obj.cleaned_data['name']) # 更新教师姓名方法1 tch_obj = models.Teacher.objects.filter(id=nid).first() tch_obj.name = obj.cleaned_data['name'] # 更新教师姓名方法2 tch_obj.save() tch_obj.t2c.set(tc) return redirect('/school/teachers/') return render(request, 'edit_teacher.html', {'nid': nid, 'obj': obj})
新闻热点
疑难解答