首頁 >後端開發 >Python教學 >Django中ModelForm元件的介紹(程式碼範例)

Django中ModelForm元件的介紹(程式碼範例)

不言
不言轉載
2019-03-13 13:23:172385瀏覽

這篇文章帶給大家的內容是關於Django中ModelForm元件的介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

通常在Django專案中,我們寫的大部分都是與Django 的模型緊密映射的表單。舉個例子,你也許會有個Book 模型,你也想建立一個form表單用來新增和編輯書籍資訊到這個模型。在這種情況下,在form表單中定義欄位將是冗餘的,因為我們已經在模型中定義了那些欄位。

基於這個原因,Django 提供一個輔助類別來讓我們可以從Django 的模型建立Form,這就是ModelForm。

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  # 自定义错误信息

ModelForm的驗證

與普通的Form表單驗證類型類似,ModelForm表單的驗證在呼叫is_valid() 或存取errors屬性時隱式調用。

我們可以像使用Form類別一樣自訂局部鉤子方法和全域鉤子方法來實作自訂的校驗規則。

如果我們不重寫具體欄位並設定validators屬性的化,ModelForm是依照模型中欄位的validators來校驗的。

save()方法

每個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中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除