這篇文章帶給大家的內容是關於Django中ModelForm元件的介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
通常在Django專案中,我們寫的大部分都是與Django 的模型緊密映射的表單。舉個例子,你也許會有個Book 模型,你也想建立一個form表單用來新增和編輯書籍資訊到這個模型。在這種情況下,在form表單中定義欄位將是冗餘的,因為我們已經在模型中定義了那些欄位。
基於這個原因,Django 提供一個輔助類別來讓我們可以從Django 的模型建立Form,這就是ModelForm。
form與model的結合。
from django import forms from crm import models class RegForm(forms.ModelForm): password = forms.CharField( widget=forms.PasswordInput, label='密码', min_length=6, max_length=12 ) re_password = forms.CharField( widget=forms.PasswordInput, label='确认密码', min_length=6, max_length=12 ) mobile = forms.CharField( ) class Meta: model = models.UserProfile # 指定model fields = '__all__' # 全部字段 # fields = ['username','password'] # 指定字段 exclude = ['is_active'] # 除某个字段之外的其余字段 labels = { 'username':'用户名' } error_messages = { 'min_length': '太短了', } widgets = { 'username': forms.TextInput(attrs={'placeholder': '用户名@xx.com'}), }
class Meta下常用參數:
model = models.Book # 对应的Model中的类 fields = "__all__" # 字段,如果是__all__,就是表示列出所有的字段 exclude = None # 排除的字段 labels = None # 提示信息 help_texts = None # 帮助提示信息 widgets = None # 自定义插件 error_messages = None # 自定义错误信息
與普通的Form表單驗證類型類似,ModelForm表單的驗證在呼叫is_valid() 或存取errors屬性時隱式調用。
我們可以像使用Form類別一樣自訂局部鉤子方法和全域鉤子方法來實作自訂的校驗規則。
如果我們不重寫具體欄位並設定validators屬性的化,ModelForm是依照模型中欄位的validators來校驗的。
每個ModelForm也具有一個save()方法。這個方法根據表單綁定的資料來建立並保存資料庫物件。 ModelForm的子類別可以接受現有的模型實例作為關鍵字參數instance;如果提供此功能,則save()將更新該實例。如果沒有提供,save() 將建立模型的一個新實例:
>>> from myapp.models import Book >>> from myapp.forms import BookForm # 根据POST数据创建一个新的form对象 >>> form_obj = BookForm(request.POST) # 创建书籍对象 >>> new_ book = form_obj.save() # 基于一个书籍对象创建form对象 >>> edit_obj = Book.objects.get(id=1) # 使用POST提交的数据更新书籍对象 >>> form_obj = BookForm(request.POST, instance=edit_obj) >>> form_obj.save()
以上是Django中ModelForm元件的介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!