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/

 

posted @ 2018-01-31 22:56  流星之泪  阅读(92)  评论(0)    收藏  举报