验证模型表格

时间:2018-04-06 18:47:21

标签: django python-2.7 modelform

我正在尝试对模型表单进行验证,以检查'email'和'confirm_email'是否具有相同的值。我尝试在线搜索,但收到一些错误。我在models.py文件中制作自定义验证器。

你可以帮我解决这个问题。什么是验证模型表单的最佳方法。

这是我的代码。

MODELS.PY

from django.db import models

from django.core import validators

from django.core.exceptions import ValidationError
# Create your models here.
def validate_equal(self, email, confirm_email):
    if email != confirm_email:
        raise ValidationError(
        ('email does not match'),
        params={'email': email, 'confirm_email': confirm_email}
        )

class NewSubscriber(models.Model):
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    email = models.EmailField(max_length=254,unique=True)
    confirm_email = models.EmailField(max_length=254, validators=[validate_equal('self', 'email', 'confirm_email')])

1 个答案:

答案 0 :(得分:1)

您无法进行此类验证,尤其是在您想要比较字段时。你在这里所做的就是传递文字字符串'email'和'confirm_email'(以及'self',出于某种原因) - 你在定义时调用验证函数。

相反,在表单上使用一个干净的方法。

class NewSubscriberForm(forms.ModelForm):
    class Meta:
        fields = '__all__'

    def clean(self):
        if self.cleaned_data['email'] != self.cleaned_data['confirm_email']:
            raise forms.ValidationError('email does not match')
        return self.cleaned_data