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

     

  • 相关阅读:
    web框架和Django框架的初识
    外键的变种,单表的查询,多表的查询
    数据库的安装与初识
    响应式设计中几个class区别
    Velocity+Java较全教程
    Web开发基础
    AutoCompleteTextView不能使用的问题
    Http中Cookie与Set-Cookie头
    Java Web 乱码
    Karel运行环境配置
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223192.html
Copyright © 2011-2022 走看看