1.定义model.py
model中定义的字段类型,只有在通过form进行验证的时候才有效,数据库中的字段类型与其并不完全一致,如数据库中并没有ipaddress类型。如果不通过form对字段进行验证,则用户可以在前端输入任何类型数据而不会出错。
from django.db import modelsclass hv(models.Model): name=models.CharField(max_length=100,unique=True,primary_key=True) ip=models.GenericIPAddressField() def __str__(self): return self.name
2.定义froms.py
ModelForm将model和前台form连接到了一起
forms.Form并未连接后端的model,只是用来对前台输入进行判断其是否合法
from django import formsfrom django.forms import ModelFormfrom aptest.models import hv,vm,test #导入需要使用的modelclass hvform(ModelForm): class Meta: model = hv fields = ['name','ip'] #fields = '__all__' #选择使用所有字段 #exclude = ['title'] #不适用某个字段
class vmform(ModelForm): cpu=forms.CharField(max_length=5,error_messages={'required': 'Please enter your name'}) #重新对cpu字段进行格式限制,会覆盖Model中已定义的类型格式。自定义错误信息,需要知道具体错误的名称 如“requeired”这些名称可以在API 中找到 class Meta: model = vm fields = '__all__'
3.编辑views.py
def add(request): if request.method == 'POST': #print request.POST['hvname'],request.POST['hvip'] print request.method form = hvform(request.POST) if form.is_valid(): #判断输入数据是否合法 #print form #print form.cleaned_data['name'],form.cleaned_data['ip'] fc = form.cleaned_data print fc['name'],fc['ip'] else: err.append(form.errors) #输出错误信息 else: form = hvform() context={ 'hour_offset':hour_offset,'ls':ls,'err':err} return render(request,'aptest/form.html',context)
4.编辑模板form.html
{% if err %}ADD
Please correct the error: {
{ err }} below. {% endif %}访问输出:
在模版中通过{
{form.as_table}} 方式显示form内容时,Django会自动的将外键字段转化成一个select的控件,并且通过下拉框来选择一个值,如下图:context={ 'err':err,'form':form}return render(request,'aptest/current_datetime.html',context)