首页 > 编程 > Python > 正文

使用Django Form解决表单数据无法动态刷新的两种方法

2020-02-16 01:53:18
字体:
来源:转载
供稿:网友

一、无法动态更新数据的实例

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})            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表