1. 程式人生 > >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':'
郵箱格式錯誤', } }

設定鉤子函式

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>

 

一 校驗欄位