1. 程式人生 > 程式設計 >django框架ModelForm元件用法詳解

django框架ModelForm元件用法詳解

本文例項講述了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程式設計有所幫助。