Django中modelform的使用

Django中modelform的使用

django中,通常model和form有很多相似的字段,多次雷同的定义是有点坑爹,还好看到了modelform,记录一下用法,例如有下面一个model

class EmailVerifyRecord(models.Model):
    code = models.CharField(max_length=20, verbose_name=u'验证码')
    email = models.EmailField(max_length=20, verbose_name=u'邮箱')

    class Meta:
        verbose_name = u'邮箱验证'
        verbose_name_plural = verbose_name

    def __unicode__(self):
        return self.code + '(' + self.email + ')'

我们定义form的时候,可以以如下的方式定义

class EmailVerifyRecordForm(forms.ModelForm):
    class Meta:
        model = EmailVerifyRecord

相当简洁,而且还能像如下的方式选择想要的字段以及添加更多的字段

class EmailVerifyRecordForm(forms.ModelForm):
    new_field = forms.CharField()

    class Meta:
        model = EmailVerifyRecord
        fields = ['code']

除此之外,modelform在验证的时候,可以自定义对相应的字段进行验证,例如

class EmailVerifyRecordForm(forms.ModelForm):
    new_field = forms.CharField()

    class Meta:
        model = EmailVerifyRecord
        fields = ['code']

    def clean_code(self):
        code = self.cleaned_data['code']
        if 'a' in code:
            return code
        else:
            raise forms.ValidationError(u'code 包含了a,不合法', code='code invalid')

这样,在调用如下代码的时候

myform =ValidationError(request.POST)
if myform.is_valid():
    print ('通过验证')
else:
    print ('未通过验证')

当code包含a就不会通过验证了,另外,相对于普通的form,modelform多了一个save方法,调用相当于调用的是model的sava方法,只要记得sava方法中传入参数commit=True就可以直接保存数据到数据库,如果不传,就像py3的pymysql执行了不提交一样,不会保存到数据库

你可能感兴趣的:(django学习笔记)