Django—Form两种解决表单数据无法动态刷新的方法
一、无法动态更新数据的实例
# Create your models here. class Classes(models.Model): title=models.CharField(max_length=32) def __str__(self): return self.title class Teacher(models.Model): name=models.CharField(max_length=32) t2c=models.ManyToManyField(Classes) def __str__(self): return self.name
2. views的功能有查看、添加、编辑班级或教师表
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'}) # ) # class LoginForm(forms.Form): # ... # hobby = forms.fields.MultipleChoiceField( # choices=((1, "篮球"), (2, "足球"), (3, "双色球"),), # label="爱好", # initial=[1, 3], # widget=forms.widgets.CheckboxSelectMultiple() # ) 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() # widget=widgets.CheckboxSelectMultiple(attrs={'class': 'form-control'}) ) def classes(request): cls_list=models.Classes.objects.all() return render(request,'class/classes.html',{'cls_list':cls_list}) def teachers(request): tch_list = models.Teacher.objects.all() return render(request, 'class/teachers.html', {'tch_list': tch_list}) def add_cls(request): if request.method=='GET': obj=ClsForm() return render(request,'class/add_classes.html',{'obj':obj}) else: obj=ClsForm(request.POST) # print(obj) if obj.is_valid(): models.Classes.objects.create(**obj.cleaned_data) return redirect(reverse('classes')) return render(request,'class/add_classes.html',{'obj':obj}) def add_tch(request): if request.method=="GET": obj=TchForm() return render(request,'class/add_teacher.html',{'obj':obj}) else: obj=TchForm(request.POST) if obj.is_valid(): tc=obj.cleaned_data.pop('t2c') tch_obj=models.Teacher.objects.create(name=obj.cleaned_data['name']) tch_obj.t2c.add(*tc) return redirect(reverse('teacher')) return render(request,'class/add_teacher.html',{'obj':obj}) def edit_class(request,pk): if request.method == 'GET': cls = models.Classes.objects.filter(id=pk).first() obj = ClsForm(initial={'title': cls.title}) return render(request, 'class/edit_classes.html', {'nid': pk, 'obj': obj}) else: obj = ClsForm(request.POST) if obj.is_valid(): models.Classes.objects.filter(id=pk).update(**obj.cleaned_data) return redirect(reverse('classes')) return render(request, 'class/edit_classes.html', {'nid':pk, 'obj': obj}) def edit_tch(request,pk): if request.method=='GET': tch=models.Teacher.objects.filter(id=pk).first() v=tch.t2c.values_list('id') cls_ids = list(zip(*v))[0] if list(zip(*v)) else [] # 格式化为列表类型 obj = TchForm(initial={'name': tch.name, 't2c': cls_ids}) return render(request, 'class/edit_teacher.html', {'nid': pk, 'obj': obj}) else: obj = TchForm(request.POST) if obj.is_valid(): tc = obj.cleaned_data.pop('t2c') # 获取修改后的任课班级id tch_obj = models.Teacher.objects.filter(id=pk).first() tch_obj.name = obj.cleaned_data['name'] # 更新教师姓名方法2 tch_obj.save() tch_obj.t2c.set(tc) return redirect(reverse('teacher')) return render(request,'class/edit_teacher.html',{'nid':pk,'obj':obj}) # models.Teacher.objects.filter(id=nid).update(name=obj.cleaned_data['name']) # 更新教师姓名方法1
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>班级列表</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %}">
</head>
<body>
<div style="width: 700px; margin: 30px auto">
<a class="btn btn-default" href="{% url 'add_cls' %}" style="margin-bottom: 10px">添加班级</a>
<table class="table table-hover" border="1" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>班级</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for item in cls_list %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.title }}</td>
<td><a href="{% url 'edit_cls' item.pk %}{{item.id }}">编辑</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>
addclass.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>添加班级</title> </head> <body> <h1>添加班级</h1> <form action="" method="post"> {% csrf_token %} <p> {{ obj.title }} {{ obj.errors.title.0 }} </p> <input type="submit" value="提交"> </form> </body> </html>
edit_class.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>编辑班级</title> </head> <body> <h1>编辑班级</h1> <form action="" method="post"> {% csrf_token %} <p> {{ obj.title }} {{ obj.errors.title.0 }} </p> <input type="submit" value="提交"> </form> </body> </html>
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>教师列表</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %}">
</head>
<body>
<div style="width: 700px; margin: 30px auto">
<a class="btn btn-default" href="{% url 'add_tch' %}" style="margin-bottom: 10px">添加教师</a>
<table class="table table-hover" border="1" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>任教班级</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for item in tch_list %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<td>
{% for row in item.t2c.all %}
<span style="border: solid gray 1px">{{ row.title }}</span>
{% endfor %}
</td>
<td><a href="{% url 'edit_tch' item.id %}">编辑</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加教师</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %}">
</head>
<body>
<div style="width: 500px; margin: 20px auto">
<h3 style="width: 100px; margin: 10px auto">添加教师</h3>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
<div class="form-group">
<label class="col-sm-2 control-label">姓名</label>
<div class="col-sm-10">
{{ obj.name }} {{ obj.errors.name.0 }}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">班级</label>
<div class="col-sm-10">
{{ obj.t2c }} {{ obj.errors.t2c.0 }}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-default" value="提交"/>
</div>
</div>
</form>
</div>
</body>
</html>
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>编辑教师</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %}">
</head>
<body>
<div style="width: 500px; margin: 20px auto">
<h3 style="width: 100px; margin: 10px auto">编辑教师</h3>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
<div class="form-group">
<label class="col-sm-2 control-label">姓名</label>
<div class="col-sm-10">
{{ obj.name }} {{ obj.errors.name.0 }}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">班级</label>
<div class="col-sm-10">
{{ obj.t2c }} {{ obj.errors.t2c.0 }}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-default" value="提交"/>
</div>
</div>
</form>
</div>
</body>
</html>
浙公网安备 33010602011771号