Django之forms.ModelForm

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

 

  基于这个原因,Django 提供一个辅助类来让我们可以从Django 的模型创建Form,这就是ModelForm

 

modelForm定义

    formmodel的终极结合,会根据你model中的字段转换成对应的form字段,并且并你生成标签等操作。

 

    models中的表是下面的内容:

class Book(models.Model):

    nid = models.AutoField(primary_key=True)

    title = models.CharField( max_length=32)

    publishDate=models.DateField()

    price=models.DecimalField(max_digits=5,decimal_places=2)

    publish=models.ForeignKey(to="Publish",to_field="nid")

    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,则为更新操作!

 

posted @ 2019-07-21 22:42  笑得好美  阅读(1140)  评论(0编辑  收藏  举报