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