Django基础之ModelForm
顾名思义ModelForm就是将Model和Form结合到了一起。
forms.py:
from django import forms
from hello.models import Publisher
class PublisherForm(forms.ModelForm):
class Meta:
model = Publisher
exclude = ("id",) # 不在页面上显示的字段
fields = '__all__' # 在页面上显示所有的字段
fields = ('name', 'address', 'website') # 在页面上显示指定的字段
示例:自定义验证,不允许插入重名的出版社名称
方法一:def validate_name() 针对某个字段进行验证
from django import forms
from hello.models import Publisher
from django.core.exceptions import ValidationError
def validate_name(value):
try:
Publisher.objects.get(name=value)
raise ValidationError('%s的信息已经存在' % value)
except Publisher.DoesNotExist:
pass
class PublisherForm(forms.ModelForm):
name = forms.CharField(label='名称', validators=[validate_name])
class Meta:
model = Publisher
fields = '__all__'
方法二:def clean_fieldsname() 针对某个字段进行验证
from django import forms
from hello.models import Publisher
from django.core.exceptions import ValidationError
class PublisherForm(forms.ModelForm):
def clean_name(self): # self代表表单对象
value = self.cleaned_data.get('name')
try:
Publisher.objects.get(name=value)
raise ValidationError('%s的信息已经存在' % value)
except Publisher.DoesNotExist:
pass
return value
class Meta:
model = Publisher
fields = '__all__'
方法三:def clean() 针对整个表单进行验证
from django import forms
from hello.models import Publisher
class PublisherForm(forms.ModelForm):
def clean(self): # self代表表单对象
cleaned_data = super(PublisherForm, self).clean()
value = cleaned_data.get('name')
try:
Publisher.objects.get(name=value)
self._errors['name'] = self.error_class(['%s的信息已经存在' % value])
except Publisher.DoesNotExist:
pass
return cleaned_data
class Meta:
model = Publisher
fields = '__all__'
示例:验证密码和确认密码是否相等
def clean()
表单字段验证器:https://docs.djangoproject.com/en/1.11/ref/validators/

浙公网安备 33010602011771号