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

     

  • 相关阅读:
    Could note find result map com.xxxx.entity.UserAccountDO
    浏览器通过file://访问文件和通过http://访问文件有什么区别
    FreeMarker template error: The following has evaluated to null or missing: ==> blogger.md [in template "admin/about.ftl" at line 44, column 84]
    2018-01-03 --活动观赏鱼的2017总结及2018年展望
    eclipse open call hierarchy无效
    Mysql 查询重复的记录
    oracle用户、权限操作
    Oracle 修改表操作
    Python 魔法方法详解
    Python __dict__和vars()
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223192.html
Copyright © 2011-2022 走看看