zoukankan      html  css  js  c++  java
  • 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,则为更新操作!

     

  • 相关阅读:
    深入解析Hibernate核心接口
    Hibernate基本原理
    深入hibernate的三种状态
    Hibernate commit() 和flush() 的区别
    Hibernate中的merge使用详情解说
    Record is locked by another user
    Vue路由router-link的使用
    Vue-router的基本使用
    Vue把父组件的方法传递给子组件调用(评论列表例子)
    Vue中子组件调用父组件的方法
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223192.html
Copyright © 2011-2022 走看看