django之ModelForm元件
阿新 • • 發佈:2018-11-25
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':'郵箱格式錯誤', } }
設定鉤子函式
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, 'user_form.html', {'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>
一 校驗欄位