clean不会在我的登录表单上显示错误,无论我的输入是什么,也不管我在干净时尝试显示错误的方法。
在我的CustomUserCreationForm中,错误显示效果很好。两者之间的唯一区别是登录扩展forms.Form而Custom扩展UserCreationForm
此外,我正在使用django-crispy-forms来呈现我的表单
class LoginForm(forms.Form):
username = forms.CharField(label=('UserName'),
widget = forms.TextInput(attrs={'placeholder': _('Username')})
)
password = forms.CharField(label=('Password'),
widget=forms.PasswordInput(attrs={'placeholder' : _('Password') }),
)
def helper(self):
helper = FormHelper()
helper.form_id = "Login"
helper.form_method = "POST"
helper.layout = Layout(Div(
Field('username', css_class='input-box-rounded'),
Field('password', css_class='input-box-rounded'),
Submit('Login', 'Login', css_class='col-md-6 col-md-offset-3 rounded'),
css_class='col-md-4 col-md-offset-4 centered-div'))
return helper
def clean(self):
cleaned_data = super(LoginForm, self).clean()
if 'username' not in cleaned_data:
msg = _("Please enter a username")
self._errors['username'] = self.error_class([msg])
if 'password' not in cleaned_data:
msg = _("Please enter a password")
raise forms.ValidationError(msg)
u =authenticate(username = cleaned_data['username'], password = cleaned_data['password'])
if u == None:
msg = _("Username or Password is incorrect")
self.add_error('username', msg)
return cleaned_data
答案 0 :(得分:1)
您可以发布视图和模板代码吗?在没有看到其中任何一个的情况下,我假设你的模板需要显示错误,或者你的视图没有处理表单,尽管我还没有使用过Django Crispy Forms。
{{ form.non_field_errors }}
{{ form.username.errors }}
仅供参考,处理错误检查的首选方法是为每个字段创建一个clean函数,并在出现问题时引发ValidationError。这将是一个字段错误(上面的第二行)。
def clean_password(self):
data = self.cleaned_data.get('password')
if not data:
raise ValidationError(_("Please enter a password"))
此外,由于您只是检查字段是否存在,因此您可以为每个必填字段设置required=True
并跳过手动验证。
class LoginForm(forms.Form):
username = forms.CharField(label=('UserName'), required=True,
widget = forms.TextInput(attrs={'placeholder': _('Username')})
)
password = forms.CharField(label=('Password'), required=True,
widget=forms.PasswordInput(attrs={'placeholder' : _('Password') }),
)
有关详细信息,请参阅文档:https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template