Django之forms.ModelForm

一般在Django项目中,咱们编写的大部分都是与Django 的模型紧密映射的表单。 举个例子,你也许会有个Book 模型,而且你还想建立一个form表单用来添加和编辑书籍信息到这个模型中。 在这种状况下,在form表单中定义字段将是冗余的,由于咱们已经在模型中定义了那些字段。git

 

  基于这个缘由,Django 提供一个辅助类来让咱们能够从Django 的模型建立Form,这就是ModelFormui

 

modelForm定义

    formmodel的终极结合,会根据你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中的OnetooneManytomany属性会自动转换成ModelChoiceFieldModelMultipleChocieField自动读取数据。 

 

ModelForm组件使用中添加数据,能够直接用save()方法,在使用save方法时,若是对象在实例化时有指定第二个关键字参数instance,则为更新操做!

相关文章
相关标签/搜索