Model(django.db.models.Model)
官方解釋爲A model is the single, definitive source of data about your data. It contains the essential fields and behaviors of the data you’re storing. Generally, each model maps to a single database table.
其實就是django提供給開發人員用於設計數據集的接口,model提供了多種數據類型,很好的提高了開發人員在數據集處理效率。一般而言,每一個數據集在後臺數據庫中都對應一個表單。數據表單可以通過django指令自動生成,當然用戶也可以根據數據庫需要自行設計表單,但是表單必須與Model數據集元素類型保持一定的對應關係。
ModelForm(django.forms.ModelForm)
如果開發人員需要設計以數據庫驅動的應用,也就是說需要前端提交表單來修改後臺數據庫,這個時候就需要ModelForm。它實質上就是Model的表單抽象,可以在其內部做更復雜的操作,這些操作主要是針對表單數據的。
那麼問題來了,模型(Model)和模型表單(ModelForm)是如何關聯的呢?
每一個ModelForm都依託一個Model,需要先設計Model之後,在設計對應的ModelForm。
假設已定義好Model,如下
class Book(models.Model):
name = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
則對應需要設計一個ModelFormimport Book
class BookForm(ModelForm):
class Meta:
model=Book
def clean_<fieldname>:
...
這樣就建立了Model和ModelForm,代碼在處理客戶端POST請求時,將request導向某個函數,函數內部,使用
form = BookForm(request.POST, instance=None)
就可以將表單轉換爲內部form對象了,在經過一些列的操作,諸如is_valid、clean_<fieldname>、pre_save信號處理等,就可以將表單數據保存了,方法
from.save()