通常在Django项目中,我们编写的大部分都是与Django 的模子严密映照的表单。 举个例子,你或许会有个Book 模子,而且你还想建立一个form表单用来增加和编辑书本信息到这个模子中。 在这类情况下,在form表单中定义字段将是冗余的,由于我们已经在模子中定义了那些字段。
基于这个缘由,Django 供应一个辅佐类来让我们能够从Django 的模子建立Form,这就是ModelForm。
modelForm定义
form与model的连系。
from django import forms from crm import models class RegForm(forms.ModelForm): password = forms.CharField( widget=forms.PasswordInput, label='暗码', min_length=6, max_length=12 ) re_password = forms.CharField( widget=forms.PasswordInput, label='确认暗码', min_length=6, max_length=12 ) mobile = forms.CharField( ) class Meta: model = models.UserProfile # 指定model fields = '__all__' # 悉数字段 # fields = ['username','password'] # 指定字段 exclude = ['is_active'] # 除某个字段以外的其他字段 labels = { 'username':'用户名' } error_messages = { 'min_length': '太短了', } widgets = { 'username': forms.TextInput(attrs={'placeholder': '用户名@xx.com'}), }
class Meta下经常运用参数:
model = models.Book # 对应的Model中的类 fields = "__all__" # 字段,假如是__all__,就是示意列出一切的字段 exclude = None # 消除的字段 labels = None # 提醒信息 help_texts = None # 协助提醒信息 widgets = None # 自定义插件 error_messages = None # 自定义错误信息
ModelForm的考证
与一般的Form表单考证范例相似,ModelForm表单的考证在挪用is_valid() 或接见errors 属性时隐式挪用。
我们能够像运用Form类一样自定义部分钩子要领和全局钩子要领来完成自定义的校验划定规矩。
假如我们不重写细致字段并设置validators属性的化,ModelForm是依据模子中字段的validators来校验的。
save()要领
每一个ModelForm还具有一个save()要领。 这个要领依据表单绑定的数据建立并保留数据库对象。 ModelForm的子类能够接收现有的模子实例作为关键字参数instance;假如供应此功用,则save()将更新该实例。 假如没有供应,save() 将建立模子的一个新实例:
>>> from myapp.models import Book >>> from myapp.forms import BookForm # 依据POST数据建立一个新的form对象 >>> form_obj = BookForm(request.POST) # 建立书本对象 >>> new_ book = form_obj.save() # 基于一个书本对象建立form对象 >>> edit_obj = Book.objects.get(id=1) # 运用POST提交的数据更新书本对象 >>> form_obj = BookForm(request.POST, instance=edit_obj) >>> form_obj.save()
以上就是Django中ModelForm组件的引见(代码示例)的细致内容,更多请关注ki4网别的相干文章!