django框架ModelForm組件用法詳解
本文實例講述了django框架ModelForm組件用法。分享給大家供大家參考,具體如下:
ModelForm組件是django中一個非常強(qiáng)大的組件,其功能主要有
一 校驗字段
ModelForm組件的主要格式為:
繼承組件
from django import forms class UserModelForm(forms.ModelForm):
指定表
model = models.UserInfo
指定要顯示的字段
fields='__all__' #顯示所有,常用的方式
或者
exclude=['password'] #排除某個字段
或者
fields=['username','password','confirm_password','email','gender','depart'] #此表中的字段決定了頁面顯示的排列順序
插件:指定屬性或者設(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'}), }
定制錯誤信息
error_messages = { 'email':{ 'required':'郵箱不能為空', 'invalid':'郵箱格式錯誤', } }
設(shè)置顯示的標(biāo)簽名稱:
labels={"username":"用戶名","password":"密碼"}
設(shè)置鉤子函數(shù)
def clean_confirm_password(self): #'clean_'加上字段名 這里先使用局部鉤子
當(dāng)設(shè)置了一個字段的鉤子函數(shù)時,最后必須要返回這個字段
return confirm
在函數(shù)中使用
def user_add(request): if request.method == 'GET': form = UserModelForm() #最開始訪問的時候是沒有數(shù)據(jù)的 return render(request, 'user_form.html', {'form':form}) form = UserModelForm(data=request.POST) #傳入數(shù)據(jù) if form.is_valid(): #進(jì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組件對數(shù)據(jù)進(jìn)行校驗的時候,對于校驗不合格的數(shù)據(jù)放入 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>
一 校驗字段
下面一個例子:校驗用戶的信息,并且確認(rèn)用戶的密碼
需要對原有數(shù)據(jù)進(jìn)行編輯時,需要加入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本身就有對字段檢測的功能,只不過單純的是對空的判斷,一般顯示的錯誤信息是英文,我們要顯示為中文呢,怎么處理
LANGUAGE_CODE = 'zh-hans' # LANGUAGE_CODE = 'en-us'
希望本文所述對大家基于Django框架的Python程序設(shè)計有所幫助。
相關(guān)文章
Python實戰(zhàn)之看圖猜字游戲的實現(xiàn)
看圖猜成語,是考驗一個人的反應(yīng)能力,也考驗一個人的右腦思維。據(jù)說越聰明的人,這道題的完成率越高。本文就來用Python實現(xiàn)這一經(jīng)典小游戲,需要的可以參考一下2023-02-02將python flask項目打包成可以運(yùn)行的軟件的全過程(包含報錯解決)
這篇文章主要給大家介紹了將python flask項目打包成可以用運(yùn)行的軟件(包含報錯解決),文中通過代碼示例和圖文結(jié)合講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2024-02-02pycharm遠(yuǎn)程連接docker容器的操作流程
這篇文章主要給大家介紹了pycharm遠(yuǎn)程連接docker容器的操作流程,文中通過代碼示例和圖文講解介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2023-08-08PyTorch零基礎(chǔ)入門之構(gòu)建模型基礎(chǔ)
PyTorch是一個開源的Python機(jī)器學(xué)習(xí)庫,基于Torch,用于自然語言處理等應(yīng)用程序,它是一個可續(xù)計算包,提供兩個高級功能:1、具有強(qiáng)大的GPU加速的張量計算(如NumPy)。2、包含自動求導(dǎo)系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)2021-10-10Python集合中remove()函數(shù)的使用方法詳解
這篇文章主要給大家介紹了關(guān)于python集合中remove()函數(shù)的使用,以及在使用Python集合的remove方法時應(yīng)注意的事項,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Python中實現(xiàn)定時任務(wù)常見的幾種方式
在Python中,實現(xiàn)定時任務(wù)是一個常見的需求,無論是在自動化腳本、數(shù)據(jù)處理、系統(tǒng)監(jiān)控還是其他許多應(yīng)用場景中,Python提供了多種方法來實現(xiàn)定時任務(wù),包括使用標(biāo)準(zhǔn)庫、第三方庫以及系統(tǒng)級別的工具,本文將詳細(xì)介紹幾種常見的Python定時任務(wù)實現(xiàn)方式2024-08-08