我正在尝试对模型表单进行验证,以检查'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')])
答案 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