Django中ModelForm簡易使用教程

會測試的鯨魚 發佈 2024-04-25T21:46:57.643932+00:00

對於Django不太熟且開發經驗不太多的同學,寫前後端傳參的時候,可能會把所有參數都寫一遍,或者進行遍歷。但是這樣寫會有以下幾個問題點:用戶提交數據需要單獨寫校驗;錯誤信息要單獨寫前端代碼進行展示;頁面上每一個欄位都需要寫代碼;關聯數據,需要手動獲取並遍歷展示。

對於Django不太熟且開發經驗不太多的同學,寫前後端傳參的時候,可能會把所有參數都寫一遍,或者進行遍歷。但是這樣寫會有以下幾個問題點:

  • 用戶提交數據需要單獨寫校驗;
  • 錯誤信息要單獨寫前端代碼進行展示;
  • 頁面上每一個欄位都需要寫代碼;
  • 關聯數據,需要手動獲取並遍歷展示。

而且實際工作中,即使想手動完成上面這些點,也很容易遺漏導致bug出現。

而Django為了幫忙開發者處理以上問題,更快捷的完成開發工作,提供了一個組件:ModelFORM

ModelForm簡介

從字面意思就可以看出來,這個組件的功能就是把model和form組合起來。初看這是句廢話,熟練使用後就會有種就是這樣的明悟。

ModelForm使用演示

準備Model類,這裡準備了這樣兩個:

其中Department重寫了__str__方法,是為了在前端能直接顯示部門名稱,默認的__str__方法返回的是對象的內存地址。

引入ModelForm,將這個ModelForm和Model關聯起來:

可以看到在ModelForm中引入了Model,參數fields是用來定義這個ModelForm中具體的欄位的,可以直接從Model中取,也可以自己重新定義,比如這裡就重新定義了name的欄位長度必須不小於3個字符。

還重寫了一遍__init__方法,這是為了讓前端顯示時有一個風格,默認是全部堆積在一起的,不太美觀。

在需要使用這個ModelForm的時候,可以這樣:

在模板文件中可以這樣使用:

其中參數field.label就是Model中定義欄位時設置的verbose_name。

最終顯示到前端的效果:

後端接收提交的邏輯就比較簡單了,不再需要單個取欄位往Model中存,只需要這樣:

is_valid方法是校驗數據是否有效,校驗的標準是資料庫是否支持和自己定義的欄位規則。如果數據有效,就可以直接調用save方法,不用寫代碼用Model存資料庫,當然save其實底層也是一樣在調用ORM。保存成功後就跳轉到列表頁面。

如果上傳的數據有問題,就將這個數據返回給前端,讓前端展示錯誤信息。前面的模板文件中可以看到有一個field.errors.0,其實是可能存在多個error同時存在的,但是沒必要一次性全部展示,所以這裡只展示第一條error。

前端報錯效果:

Django默認是使用英文的,提示語是跟隨Django的設置的,要改變語言的話可以到settings.py中調整:

其中zh-hans表示中文。

總結

如果學過Java後端開發,對於這裡提的ModelForm應該會有似曾相識的感覺。雖然現在都是前後端分離,前後端基本都是在使用json交互,但是Django的ModelForm還是值得一看的,在一些小項目中非常值得一用。

關鍵字: