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()




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