一般在Django項目中,咱們編寫的大部分都是與Django 的模型緊密映射的表單。 舉個例子,你也許會有個Book 模型,而且你還想建立一個form表單用來添加和編輯書籍信息到這個模型中。 在這種狀況下,在form表單中定義字段將是冗餘的,由於咱們已經在模型中定義了那些字段。git
基於這個緣由,Django 提供一個輔助類來讓咱們能夠從Django 的模型建立Form,這就是ModelForm。ui
form與model的終極結合,會根據你model中的字段轉換成對應的form字段,而且並你生成標籤等操做。spa
models中的表是下面的內容:插件
class Book(models.Model):orm
nid = models.AutoField(primary_key=True)對象
title = models.CharField( max_length=32)繼承
publishDate=models.DateField()ip
price=models.DecimalField(max_digits=5,decimal_places=2)ci
publish=models.ForeignKey(to="Publish",to_field="nid")get
authors=models.ManyToManyField(to='Author',)
def __str__(self):
return self.title
modelform類的寫法:
class BookForm(forms.ModelForm):
class Meta:
model = models.Book
fields = "__all__"
labels = {
"title": "書名",
"price": "價格"
}
widgets = {
"password": forms.PasswordInput(attrs={"class": "c1"}),
"publishDate": forms.DateInput(attrs={"type": "date"}),
}
class Meta下經常使用參數:
model = models.Book # 對應的Model中的類
fields =[]#指定字段
fields = "__all__" # 字段,若是是__all__,就是表示列出全部的字段
exclude = [] # 排除的字段
labels = {} # 提示信息
help_texts = {} # 幫助提示信息
widgets = {# 自定義插件
"password": forms.PasswordInput(attrs={"class": "c1"}),
"publishDate": forms.DateInput(attrs={"type": "date"}),
}
error_messages = {# 自定義錯誤信息
'title': {'required': '不能爲空', ...} # 每一個字段的全部的錯誤均可以寫
}
在繼承forms.ModelForm類時,models中的Onetoone和Manytomany屬性會自動轉換成ModelChoiceField和ModelMultipleChocieField自動讀取數據。
在ModelForm組件使用中添加數據,能夠直接用save()方法,在使用save方法時,若是對象在實例化時有指定第二個關鍵字參數instance,則爲更新操做!