Django細談之:Model和ModelForm關聯

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)
則對應需要設計一個ModelForm
import 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()




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章