一,三者的區別:
1,model 強大的數據庫操作功能,弱小的數據驗證功能
a,驗證
full_clean ->字段正則判斷-->clean方法(鈎子)
2,form 強大的數據驗證功能
is_valid() ->full_clean()->
->每個字段的正則,每個字段的方法 clean_字段名()
->_clean_form ->clean()鈎子
->_post_clean(鈎子)
----》
返回值is_valid()
cleaned_data
errors
3,modelform 強大是數據驗證,適中的數據操作
二,補充
1,choice的補充:數據庫更新后對應的網頁文件也更新
form文件:
class UserForm(forms.Form): username=fields.CharField(label='用戶名') email=fields.EmailField(label='郵箱') #前端用 obj.as_p,obj.as_table,obj.as_ul 一次性展示全部展示,后面的表示標簽的嵌套 user_type1=fields.ChoiceField(choices=model.UserTyep.objects.values_list('id','name')) user_type2=fields.ModelChoiceField(queryset=models.UserType.objects.all()) def __init__(self,*args,**kwargs): super(UserForm,self).__init__(*args,**kwargs) self.fields['user_type1'].widget.choices=models.UserType.objects.all().value_list('id','name')
models文件:
class UserType(models.Model): name=models.CharField(max_length=10) def __str__(self): #用方法二時要添加的 return self.name
三,modelForm的強大功能
1,創建modelForm對象
class UserModelForm(forms.ModelForm): class Meta: #元信息 model=model.User #表名 fields="__all__" #字段名
2,自動保存的功能
#保存數據 def index(request): if request.method=="GET": obj=UserModelForm() return render(request,'mf.html',{'obj':obj}) elif request.method=='POST': obj=UserModelForm(request.POST) if obj.is_valid(): #保存添加的數據 #models.User.objects.create(**obj.cleaned_data) #obj.save() #ModelForm提供的save方法可以自動保存,同時可以自動保存多對多的第三張表的數據。 #第三張表的數據想要單獨保存也可以 #obj.save(commit=True) 與下面的代碼等效 mobj=obj.save(commit=False) mobj.save_m2m() 保存對應的第三張表的數據 return render(request,'mf.html',{'obj':obj})
3,更新數據
#更新數據 def edit_index(request,nid): if request.method=="GET": model_obj=models.User.objects.get(id=nid) obj=UserModelForm(instance=model_obj) return render(request,'mf1.html',{'obj':obj,'nid':nid}) elif request.method=='POST': model_obj=models.User.objects.get(id=nid) obj=UserModelForm(request.POST,instance=model_obj) if obj.is_valid(): #保存添加的數據 #models.User.objects.create(**obj.cleaned_data) obj.save #ModelForm提供的save方法可以自動保存,同時可以自動保存多對多的第三張表的數據。 #第三張表的數據想要單獨保存也可以 return render(request,'mf1.html',{'obj':obj})
資源來源:
model: http://www.cnblogs.com/wupeiqi/articles/6216618.html
form : http://www.cnblogs.com/wupeiqi/articles/6144178.html
modelform: http://www.cnblogs.com/wupeiqi/articles/6229414.html