Django的password_reset表单不会检查电子邮件是否存在。无论给定的电子邮件地址是什么,它都会验证表单。
问题是,如何使用自定义表单检查并抛出不存在的电子邮件错误?
顺便说一下,我在这里找到了以下解决方案,但对我没有用(使用Django 2.1)。如果这应该起作用,我找不到我缺少什么。
forms.py
class EmailValidationOnForgotPassword(PasswordResetForm):
def clean_email(self):
email = self.cleaned_data['email']
if not User.objects.filter(email__iexact=email, is_active=True).exists():
raise ValidationError("There is no user registered with the specified email address!")
return email
urls.py
path('sifre-sifirla/', PasswordResetView.as_view(), {'password_reset_form':EmailValidationOnForgotPassword}, name='password_reset'),
提前感谢您。
编辑:
为了其他用户的信息,问题已由@Alasdair回答并且有效,但@pypypy的观点也很重要。
urls.py中的更改如下:
path('sifre-sifirla/', PasswordResetView.as_view(form_class=EmailValidationOnForgotPassword), name='password_reset'),
PasswordResetView
,属性应该是form_class
而不是password_reset_form
。我会删除字典并将其作为参数传递给as_view()
:path('sifre-sifirla/', PasswordResetView.as_view(form_class=EmailValidationOnForgotPassword), name='password_reset')
。 - Alasdair