django框架ModelForm元件用法詳解
阿新 • • 發佈:2020-01-09
本文例項講述了django框架ModelForm元件用法。分享給大家供大家參考,具體如下:
ModelForm元件是django中一個非常強大的元件,其功能主要有
一 校驗欄位
ModelForm元件的主要格式為:
繼承元件
from django import forms class UserModelForm(forms.ModelForm):
指定表
model = models.UserInfo
指定要顯示的欄位
fields='__all__' #顯示所有,常用的方式
或者
exclude=['password'] #排除某個欄位
或者
fields=['username','password','confirm_password','email','gender','depart'] #此表中的欄位決定了頁面顯示的排列順序
外掛:指定屬性或者設定欄位型別
widgets = { 'username': forms.TextInput(attrs={'class': 'form-control','placeholder': '使用者名稱'}),'password': forms.PasswordInput(attrs={'class': 'form-control','placeholder': '密碼'}),'email': forms.EmailInput(attrs={'class': 'form-control','placeholder': '郵箱'}),'gender': forms.Select(attrs={'class': 'form-control'}),'depart': forms.Select(attrs={'class': 'form-control'}),}
定製錯誤資訊
error_messages = { 'email':{ 'required':'郵箱不能為空','invalid':'郵箱格式錯誤',} }
設定顯示的標籤名稱:
labels={"username":"使用者名稱","password":"密碼"}
設定鉤子函式
def clean_confirm_password(self): #'clean_'加上欄位名 這裡先使用區域性鉤子
當設定了一個欄位的鉤子函式時,最後必須要返回這個欄位
return confirm
在函式中使用
def user_add(request): if request.method == 'GET': form = UserModelForm() #最開始訪問的時候是沒有資料的 return render(request,'user_form.html',{'form':form}) form = UserModelForm(data=request.POST) #傳入資料 if form.is_valid(): #進行校驗 print(form.cleaned_data) form.save() return redirect('/crm/user/list/') return render(request,{'form': form})
區分 form.cleaned_data和form. errors
1 ModelForm元件對資料進行校驗的時候,對於校驗不合格的資料放入 form.errors
2 那麼他們到底都長什麼樣子呢
#print(form.cleaned_data) {'username': 'lu5','password': '123','gender': 1,'depart': <Department: 部門-1>} #print(form.errors) <ul class="errorlist"><li>confirm_password<ul class="errorlist"><li>兩次密碼輸入不一致,請重新輸入</li></ul></li><li>email<ul class="errorlist"><li>郵箱格式錯誤</li></ul></li></ul>
一 校驗欄位
下面一個例子:校驗使用者的資訊,並且確認使用者的密碼
需要對原有資料進行編輯時,需要加入instance引數例如:
def user_edit(request,nid): obj = models.UserInfo.objects.filter(id=nid).first() if request.method == 'GET': form = UserModelForm(instance=obj) #注意此處 return render(request,{'form':form}) form = UserModelForm(data=request.POST,instance=obj) #注意此處 if form.is_valid(): form.save() return redirect('/crm/user/list/') return render(request,{'form': form})
另外:
django本身就有對欄位檢測的功能,只不過單純的是對空的判斷,一般顯示的錯誤資訊是英文,我們要顯示為中文呢,怎麼處理
LANGUAGE_CODE = 'zh-hans' # LANGUAGE_CODE = 'en-us'
希望本文所述對大家基於Django框架的Python程式設計有所幫助。