目录
ModelForm
认识ModelForm
优势
初识Form
初识ModelForm
添加信息
views.py
add_student_new.html
修改信息
views.py
views.py
add_student_new.html
ModelForm
认识ModelForm
-
优势
-
1、方便校验用户提交的数据
-
2、页面展示错误提示
-
3、数据库字段很多的情况下,每个字段无需手写.
-
4、关联数据,无需手动获取.
-
-
初识Form
from django import forms class Add_Student(forms.Form):user = forms.CharField(widget=forms.TextInput)pwd = forms.CharField(widget=forms.PasswordInput) def add_student_form(request):form = Add_Student()return render(request, "stu_data/add_stu_new.html",{"form":form})
-
初识ModelForm
-
from django import forms class Add_Student(forms.ModelForm):class Meta:model = models.Student# 获取数据表当中的字段# fields = ["name", "age", "gender"]# 获取全部字段fields = "__all__"# 给字段单独添加属性# widgets = {# "name": forms.TextInput(attrs={"class":"form-control"}),# "age": forms.TextInput(attrs={"class":"form-control"}),# "gender": forms.TextInput(attrs={"class":"form-control"})# }
添加信息
-
views.py
class Add_Student(forms.ModelForm):class Meta:model = models.Student# 获取数据表当中的字段# fields = ["name", "age", "gender"]# 获取全部字段fields = "__all__"# 给字段单独添加属性# widgets = {# "name": forms.TextInput(attrs={"class":"form-control"}),# "age": forms.TextInput(attrs={"class":"form-control"}),# "gender": forms.TextInput(attrs={"class":"form-control"})# } def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# name是输入框上面的名字# field 是输入框for name, field in self.fields.items():field.widget.attrs = {"class": "form-control", "autocomplete": "off"} def add_student_form(request):if request.method == "GET":form = Add_Student()# print(form)return render(request, "stu_data/add_stu_new.html", {"form": form}) # 获取post请求提交的数据form = Add_Student(data=request.POST)# 校验数据的完整性if form.is_valid():# 保存到数据表form.save()return redirect("/class/data/")return render(request, "stu_data/add_stu_new.html", {"form": form})
-
add_student_new.html
{% extends "index/index.html" %} {% load static %} {% block content %}<div class="container"><div class="panel panel-success"><div class="panel-heading"><h3 class="panel-title">添加信息</h3></div><div class="panel-body"><div class="form-group"><form method="post" novalidate>{% csrf_token %}{% for item in form %}<label for="exampleInputEmail1" class="col-sm-2" >{{ item.label }}</label>{{ item }}<span style="color: red">{{ item.errors.0 }}</span>{% endfor %}<button type="submit" class="btn btn-success">提交</button></form></div></div></div></div> {% endblock %} {% block js %} {# <script src="{% static 'js/layui.js' %}"></script>#} {# <script>#} {# layui.use(function () {#} {# var laydate = layui.laydate;#} {# // 渲染#} {# laydate.render({#} {# elem: '#id_class_time'#} {# });#} {# });#} {# </script>#} {% endblock %}
修改信息
-
views.py
def modify_student(request, nid):title = "修改信息"obj = models.Student.objects.filter(id=nid).first()if request.method == "GET":form = Add_Student(instance=obj)return render(request, "stu_data/add_stu_new.html", {"form": form,"title":title}) form = Add_Student(data=request.POST, instance=obj)if form.is_valid():form.save()return redirect("/class/data/")return render(request, "stu_data/add_stu_new.html", {"form": form, "title": title})
views.py
from django.shortcuts import render, redirect
from demo_one import models.
.
.from django import formsclass Add_Student(forms.ModelForm):class Meta:model = models.Student# 获取数据表当中的字段# fields = ["name", "age", "gender"]# 获取全部字段fields = "__all__"# 给字段单独添加属性# widgets = {# "name": forms.TextInput(attrs={"class":"form-control"}),# "age": forms.TextInput(attrs={"class":"form-control"}),# "gender": forms.TextInput(attrs={"class":"form-control"})# }def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# name是输入框上面的名字# field 是输入框for name, field in self.fields.items():field.widget.attrs = {"class": "form-control", "autocomplete": "off"}def add_student_form(request):title = "添加信息"if request.method == "GET":form = Add_Student()# print(form)return render(request, "stu_data/add_stu_new.html", {"form": form,"title":title})# 获取post请求提交的数据form = Add_Student(data=request.POST)# 校验数据的完整性if form.is_valid():# 保存到数据表form.save()return redirect("/class/data/")return render(request, "stu_data/add_stu_new.html", {"form": form})# class Modify_Student(forms.ModelForm):
# class Meta:
# model = models.Student
# # 获取数据表当中的字段
# fields = ["name"]
# # 获取全部字段
# # fields = "__all__"
# # 给字段单独添加属性
# # widgets = {
# # "name": forms.TextInput(attrs={"class":"form-control"}),
# # "age": forms.TextInput(attrs={"class":"form-control"}),
# # "gender": forms.TextInput(attrs={"class":"form-control"})
# # }
#
# def __init__(self, *args, **kwargs):
# super().__init__(*args, **kwargs)
# # name是输入框上面的名字
# # field 是输入框
# for name, field in self.fields.items():
# field.widget.attrs = {"class": "form-control", "autocomplete": "off"}# 修改信息def modify_student(request, nid):title = "修改信息"obj = models.Student.objects.filter(id=nid).first()if request.method == "GET":form = Add_Student(instance=obj)return render(request, "stu_data/add_stu_new.html", {"form": form,"title":title})form = Add_Student(data=request.POST, instance=obj)if form.is_valid():form.save()return redirect("/class/data/")return render(request, "stu_data/add_stu_new.html", {"form": form, "title": title})
add_student_new.html
{% extends "index/index.html" %}
{% load static %}{% block content %}<div class="container"><div class="panel panel-success"><div class="panel-heading"><h3 class="panel-title">{{ title }}</h3></div><div class="panel-body"><div class="form-group"><form method="post" novalidate>{% csrf_token %}{% for item in form %}<label for="exampleInputEmail1" class="col-sm-2" >{{ item.label }}</label>{{ item }}<span style="color: red">{{ item.errors.0 }}</span>{% endfor %}<button type="submit" class="btn btn-success">提交</button></form></div></div></div></div>{% endblock %}{% block js %}
{# <script src="{% static 'js/layui.js' %}"></script>#}
{# <script>#}
{# layui.use(function () {#}
{# var laydate = layui.laydate;#}
{# // 渲染#}
{# laydate.render({#}
{# elem: '#id_class_time'#}
{# });#}
{# });#}
{# </script>#}
{% endblock %}
--这样在提交数据的时候就不会直接报错了...