Django ModelForm (一)
首先看一个比较基础的form验证:
#views.py
from django.shortcuts import render # Create your views here. from django import forms from django.forms import fields from cmdb import models ##form验证: #userinfoform --> form -->baseform(is.valued) ##---> 意思为继承 class UserInfoForm(forms.Form): username = fields.CharField(max_length=32,label="用户名") password = fields.CharField(max_length=32) email = fields.EmailField() user_type = fields.ChoiceField( choices = models.UserType.objects.values_list('id','caption') ) def index(request): if request.method == 'GET': obj = UserInfoForm() ##常规form对象 return render(request,'index.html',{'obj':obj}) elif request.method == "POST": obj = UserInfoForm(request.POST) #form验证 print (obj.is_valid()) print (obj.cleaned_data) print (obj.errors) ##插入数据到数据库 #models.UserInfo.objects.create(**obj.cleaned_data) #更新数据 #models.UserInfo.objects.filter(id='1').update(**obj.cleaned_data) #obj.is_valid() return render(request,'index.html',{'obj':obj})
models.py
from django.db import models # Create your models here. class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): username = models.CharField(verbose_name="用户",max_length=32) password = models.CharField(max_length=32) email = models.EmailField() user_type = models.ForeignKey(to="UserType",to_field="id")
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action='/index/' method="POST">
{% csrf_token %}
{{ obj.as_p }}
<input type="submit" value="提交">
</form>
</body>
</html>
modelform示例
views.py(models.py同上)
from django.shortcuts import render from django import forms from django.forms import fields from cmdb import models ##form验证: #userinfoform --> form -->baseform(is.valued) ##---> 意思为继承 #modelform验证: #userinfomodelform --> modelform ----> basemodelform --> baseform class UserInfoModelForm(forms.ModelForm): class Meta: model = models.UserInfo ##UserInfo 为models下定义的类(表名),表示去哪个类下获取字段,也可以对此表进行增删改查 fields = '__all__' #代表所有字段 #fields = ['username'] #只列出username列,这里定义为一个里列表 #exclude = ['username'] #表示排除username列,其余都列出 #class UserInfoForm(forms.Form): # username = fields.CharField(max_length=32,label="用户名") # password = fields.CharField(max_length=32) # email = fields.EmailField() # user_type = fields.ChoiceField( #form ,代替models里的外键 # choices = models.UserType.objects.values_list('id','caption') # ) #modelform 验证 def index(request): if request.method == 'GET': obj = UserInfoModelForm() #modelform对象,也会自动生成html对象 return render(request,'index.html',{'obj':obj}) elif request.method == "POST": ##modelform 验证(与form方法一样) obj = UserInfoModelForm(request.POST) print (obj.is_valid()) print (obj.cleaned_data) print (obj.errors) ##插入数据到数据库 #models.UserInfo.objects.create(**obj.cleaned_data) #更新数据 #models.UserInfo.objects.filter(id='1').update(**obj.cleaned_data) return render(request,'index.html',{'obj':obj})
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action='/index/' method="POST">
{% csrf_token %}
{{ obj.as_p }} //as_json/as_table均可以
<input type="submit" value="提交">
</form>
</body>
</html>
点击提交后
圆圈中为email输入框未按规定格式输入