我相信你已经发现了,form 类的写法和模型类十分相似,连字段名字都很相近。事实上,通常在 Django 项目中,我们编写的大部分都是与 Django 的模型紧密映射的表单。 举个例子,你也许会有个 Book 模型,并且你还想创建一个 form 表单用来添加和编辑书籍信息到这个模型中。 在这种情况下,在 form 表单中定义字段将是冗余的,因为我们已经在模型中定义了那些字段。
基于这个原因,Django 提供一个辅助类来让我们可以从 Django 的模型创建 Form,这就是 ModelForm。
最简版本的 ModelForm 类
如果不需要额外指定属性,不需要额外校验字段数据,不需要指定要显示的数据,也就是把 Model 中的数据全部显示出来,不需要指定别名,或者在 Model 中已经指定了 verbose_name……那么你只需要 5 行代码就可以完成一个最精简的 ModelForm 类:
1 | from . import models |
集合常用功能的 ModelForm 类
当然,我们通常不会直接使用最简版本的 ModelForm 类。那种写法虽然简单,但是功能有限。我们很多时候都要针对需求,对表单数据进行一些处理。这时候,我们就需要使用一些方法来实现。
这里的例子是一个集合了各种常用功能的 ModelForm 类,能应对 90% 以上的需求。用的时候,只需要替换上自己数据库模型的字段,然后把没有用的功能删掉即可。
1 | from django import forms |
class Meta 下常用参数
1 | model = models.Book # 对应的Model中的类 |
经典增改查视图
views 中,使用下面的代码即可实现对于 Book 的增、改、查功能:
1 | class BookAddEditView(View): |
html 经典写法
1 | <form action="" method="post" novalidate> |