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

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

modelForm定义

    form与model的终极结合,会根据你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中的Onetoone和Manytomany属性会自动转换成ModelChoiceField和ModelMultipleChocieField自动读取数据。

在ModelForm组件使用中添加数据,可以直接用save()方法,在使用save方法时,如果对象在实例化时有指定第二个关键字参数instance,则为更新操作!

Django之forms.ModelForm的更多相关文章

  1. Django框架——forms.ModelForm使用

    使用模型创建表单 django提供了这种简便的方式,使用方法如下: 1.在项目的一个app目录中,创建forms.py文件 2.导入模块: from django import forms from ...

  2. django中forms和modelform组件的区别

    首先,我们来看看modelform的实现 model.py class Book(models.Model): title=models.CharField(max_length=32) price= ...

  3. django 表单系统 之 forms.ModelForm

    继承forms.ModelForm类实现django的表单系统 有时,我们在前端定义的<form>表单和后端定义的model结构基本上是一样的,那么我们可以直接在后端定义model后,定义 ...

  4. Django Form and Modelform Admin定义 高级查询)

    Django的form表单一般具有两种功能 1. 验证输入 2.输入HTML ---------模板----------- from django import forms class BookFor ...

  5. Django组件-Forms组件

    Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...

  6. Django—Form、ModelForm

    一.Form form.py from django import forms from django.core.exceptions import ValidationError from djan ...

  7. Django的forms表单组件批量设置字段样式

    from django import forms from . import models class UserInfoModelForms(forms.ModelForm): class Meta: ...

  8. django中的modelform和modelfoemset

    一. ModelForm ModelForm是根据Model来定制的Form 二. ModelForm的创建 from django import forms from app import mode ...

  9. Django Form和ModelForm组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

随机推荐

  1. Synchronization and Overlapped Input and Output

    You can perform either synchronous or asynchronous (also called overlapped) I/O operations on files, ...

  2. Linux 字符串处理函数

    1 strchr 函数原型:extern char *strchr(char *str,char character) 参数说明:str为一个字符串的指针,character为一个待查找字符.     ...

  3. CUBA:如何准备上线

            "在我电脑上是好的呢!"现在看来,这句话更像是调侃开发人员的一个段子,但是"开发环境与生产环境"之间的矛盾依然存在.作为开发者,你需要记住,你写 ...

  4. java 之 enum(枚举)

    推荐博客 http://blog.csdn.net/javazejian/article/details/71333103

  5. Git 常见问题汇总

    git reabse 合并多个commit git rebase -i HEAD~{NUM} git rebase -i start end 会进入一个指定区间的commit列表 根据提示进行文本编辑 ...

  6. 基于ONOS的T-SDN Super控制器,突破多域网络运营的难关

    在法国尼斯举办的IIR WDM波分论坛(Next Generation Optical Networking)上,华为展示了T-SDN(Transport SDN,传送SDN)领域的众多新技术,其中T ...

  7. Unity(GameObject)

    ####1. 这个方法用于发送一个数据到指定的方法中,第三个参数是是否强制接收 以下三种方法发送消息的形式,各有不同的效果,可以通过第一个参数指定要发送的方法名名,第二个是发送的参数值,第三个参数是是 ...

  8. Muduo网络库实战(二):实现服务器与客户端的连接

    1. 方案的确定 1)基本需求 用户1000+, IO压力不大: 多个客户端打开网站,输入查询字符串strclient,发送给服务器=>服务器接收客户端发过来的数据并处理,将结果返回给客户端: ...

  9. 地表最强的MySQL安装一键式安装,信不信你下完我就给你装好!附各种Mysql安装失败的解决办法(什么你安装失败了?快来看这个)

    这里还有数据库相关的优质文章:快戳我,快戳我

  10. CodeForces - 1047B Cover Points

    B. Cover Points time limit per test1 second memory limit per test256 megabytes inputstandard input o ...