django框架ModelForm組件用法詳解
本文實(shí)例講述了django框架ModelForm組件用法。分享給大家供大家參考,具體如下:
ModelForm組件是django中一個(gè)非常強(qiáng)大的組件,其功能主要有
一 校驗(yàn)字段
ModelForm組件的主要格式為:
繼承組件
from django import forms class UserModelForm(forms.ModelForm):
指定表
model = models.UserInfo
指定要顯示的字段
fields='__all__' #顯示所有,常用的方式
或者
exclude=['password'] #排除某個(gè)字段
或者
fields=['username','password','confirm_password','email','gender','depart'] #此表中的字段決定了頁(yè)面顯示的排列順序
插件:指定屬性或者設(shè)置字段類型
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'}),
}
定制錯(cuò)誤信息
error_messages = {
'email':{
'required':'郵箱不能為空',
'invalid':'郵箱格式錯(cuò)誤',
}
}
設(shè)置顯示的標(biāo)簽名稱:
labels={"username":"用戶名","password":"密碼"}
設(shè)置鉤子函數(shù)
def clean_confirm_password(self): #'clean_'加上字段名 這里先使用局部鉤子
當(dāng)設(shè)置了一個(gè)字段的鉤子函數(shù)時(shí),最后必須要返回這個(gè)字段
return confirm
在函數(shù)中使用
def user_add(request):
if request.method == 'GET':
form = UserModelForm() #最開(kāi)始訪問(wèn)的時(shí)候是沒(méi)有數(shù)據(jù)的
return render(request, 'user_form.html', {'form':form})
form = UserModelForm(data=request.POST) #傳入數(shù)據(jù)
if form.is_valid(): #進(jìn)行校驗(yàn)
print(form.cleaned_data)
form.save()
return redirect('/crm/user/list/')
return render(request, 'user_form.html', {'form': form})
區(qū)分 form.cleaned_data和form. errors
1 ModelForm組件對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)的時(shí)候,對(duì)于校驗(yàn)不合格的數(shù)據(jù)放入 form.errors
2 那么他們到底都長(zhǎng)什么樣子呢
#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>兩次密碼輸入不一致,請(qǐng)重新輸入</li></ul></li><li>email<ul class="errorlist"><li>郵箱格式錯(cuò)誤</li></ul></li></ul>
一 校驗(yàn)字段
下面一個(gè)例子:校驗(yàn)用戶的信息,并且確認(rèn)用戶的密碼

需要對(duì)原有數(shù)據(jù)進(jìn)行編輯時(shí),需要加入instance參數(shù)例如:
def user_edit(request,nid):
obj = models.UserInfo.objects.filter(id=nid).first()
if request.method == 'GET':
form = UserModelForm(instance=obj) #注意此處
return render(request, 'user_form.html', {'form':form})
form = UserModelForm(data=request.POST,instance=obj) #注意此處
if form.is_valid():
form.save()
return redirect('/crm/user/list/')
return render(request, 'user_form.html', {'form': form})
另外:
django本身就有對(duì)字段檢測(cè)的功能,只不過(guò)單純的是對(duì)空的判斷,一般顯示的錯(cuò)誤信息是英文,我們要顯示為中文呢,怎么處理
LANGUAGE_CODE = 'zh-hans' # LANGUAGE_CODE = 'en-us'
希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python基于pygame實(shí)現(xiàn)的font游戲字體(附源碼)
這篇文章主要介紹了Python基于pygame實(shí)現(xiàn)的font游戲字體,涉及Python響應(yīng)鍵盤按鍵動(dòng)態(tài)操作圖片元素的相關(guān)技巧,需要的朋友可以參考下2015-11-11
Python實(shí)現(xiàn)簡(jiǎn)單的列表冒泡排序和反轉(zhuǎn)列表操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單的列表冒泡排序和反轉(zhuǎn)列表操作,涉及Python列表遍歷、排序、追加等相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
Python將DataFrame的某一列作為index的方法
下面小編就為大家分享一篇Python將DataFrame的某一列作為index的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
在OpenCV里使用Camshift算法的實(shí)現(xiàn)
這篇文章主要介紹了在OpenCV里使用Camshift算法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Empty test suite.(PyCharm程序運(yùn)行錯(cuò)誤的解決方法)
今天小編就為大家分享一篇Empty test suite.(PyCharm程序運(yùn)行錯(cuò)誤的解決方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Python list列表中刪除多個(gè)重復(fù)元素操作示例
這篇文章主要介紹了Python list列表中刪除多個(gè)重復(fù)元素操作,結(jié)合實(shí)例形式分析了Python刪除list列表重復(fù)元素的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-02-02
pandas實(shí)現(xiàn)數(shù)據(jù)可視化的示例代碼
本文主要介紹了pandas實(shí)現(xiàn)數(shù)據(jù)可視化的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

