一、無法動態更新數據的實例
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})
新聞熱點
疑難解答