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

     

  • 相关阅读:
    在zend framework框架中try{}catch(Exception e){}的跳转问题
    【上】安全HTTPS-全面具体解释对称加密,非对称加密,数字签名,数字证书和HTTPS
    iOS 图像处理-剪裁图像
    Delphi DBGrid记录全选和反选拖动处理
    在DbGrid中,不按下Ctrl,单击鼠标如何实现多选?谢谢
    在DBGrid中实现多选功能
    回车跳到下一个EDIT
    远程控制篇:用Delphi模拟键盘输入/鼠标点击
    SQL的拼接语句在DELPHI中怎么写
    Delphi DbGridEh实现表格没有内容的渐变效果
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223192.html
Copyright © 2011-2022 走看看