django覆盖表单清理方法
当重写表单清理方法时,如何知道其在任何字段上的验证是否失败?e、 g.在下表中,如果我覆盖了clean方法,我如何知道表单是否在任何字段上未通过验证django覆盖表单清理方法,django,django-forms,Django,Django Forms,当重写表单清理方法时,如何知道其在任何字段上的验证是否失败?e、 g.在下表中,如果我覆盖了clean方法,我如何知道表单是否在任何字段上未通过验证 class PersonForm(forms.Form): title = Forms.CharField(max_length=100) first_name = Forms.CharField(max_length=100) surname = Forms.CharField(max_length=100) pa
class PersonForm(forms.Form):
title = Forms.CharField(max_length=100)
first_name = Forms.CharField(max_length=100)
surname = Forms.CharField(max_length=100)
password = Forms.CharField(max_length=100)
def clean(self, value):
cleaned_data = self.cleaned_data
IF THE FORM HAS FAILED VALIDATION:
self.data['password'] = 'abc'
raise forms.ValidationError("You have failed validation!")
ELSE:
return cleaned_data
谢谢
如果您的数据未验证,您的
表单实例将没有
数据属性
使用
self.is\u valid()
def clean(self, value):
cleaned_data = self.cleaned_data
if self._errors:
self.data['password'] = 'abc'
raise forms.ValidationError("You have failed validation!")
else:
return cleaned_data
奖金!您可以检查特定字段的错误:
def clean(self, value):
cleaned_data = self.cleaned_data
if self._errors and 'title' in self._errors:
raise forms.ValidationError("You call that a title?!")
else:
return cleaned_data
下面是一个简单的例子,它覆盖django.forms.Form
中的clean()
,并使用django大括号
forAnonymousRequiredMixin
要求只有匿名用户访问浏览页面:
class LoginView(AnonymousRequiredMixin, FormView):
"""
Main Login. And Social Logins
"""
template_name = 'core/login.html'
form_class = LoginForm
success_url = reverse_lazy('blog:index')
def get_success_url(self):
try:
next = self.request.GET['next']
except KeyError:
next = self.success_url
return next
def form_valid(self, form):
cd = form.cleaned_data
user = auth.authenticate(username=cd['login_username'],
password=cd['login_password'])
if user:
auth.login(self.request, user)
messages.info(self.request, 'You are logged in.')
return super(LoginView, self).form_valid(form)
尽管这是一篇老文章,但如果要对同一表单/模型表单的多个字段应用验证,请使用clean()
。此方法返回已清理的\u数据字典
要向用户显示错误,可以使用添加错误(,“您的消息”)
方法。这将在表单顶部显示错误以及字段名。示例如下所示:
add\u error()
自动从已清理的\u数据字典中删除该字段,您不必手动删除它。你也不必导入任何东西来使用它
如果您只想在表单/模型表单的单个字段上进行验证,请使用clean\(
)。此方法将从已清理的\u数据字典中获取值,然后您可以检查逻辑错误。检查完逻辑后,始终返回该值
def clean_password(self):
password = self.cleaned_data['password']
if len(password)<6:
msg = 'password is too short'
self.add_error('password', msg)
return password
def clean_密码(self):
password=self.cleaned_数据['password']
如果len(password)那么我只需检查已清理的数据,例如,如果不是自清理的数据:#执行某些操作否,该属性不存在,您将获得AttributeError。我扩展了我的答案。嗨,马克,我正使用这个过程。然而,验证错误显示在管理(更改表单)页面的顶部,我如何才能在我正在应用验证的字段上方显示错误消息。提前感谢最简单的方法是在字段的clean\uu
中引发验证错误。请参阅Hi Mark我已经编写了此加薪表单。ValidationError({'Session_type':[“error message”,]})但它在change_表单的顶部向我显示了错误消息。你能告诉我应该修改哪些内容吗?最好将其作为自己的问题而不是评论来询问。
def clean_password(self):
password = self.cleaned_data['password']
if len(password)<6:
msg = 'password is too short'
self.add_error('password', msg)
return password