附加到 Django 表单验证错误?
Append to Django Form Validation Error?
我在 Django 1.6 中使用自定义验证错误,它运行良好;但是,我一次只能显示一个错误。如果 "if" 语句中的条件失败,我该如何显示所有错误?
forms.py
class BaseNameFormSet (BaseFormSet):
...
...
...
if (firstname in firstnames) or (lastname in lastnames):
raise forms.ValidationError ('First or last name must be unique')
if (firstname == '') or (lastname == ''):
raise forms.ValidationError ('Both first and last name must be filled out')
addname.html
...
...
...
{% if formset.non_form_errors %}
<b>Please correct the error below:</b>
<ul>
{% for error in formset.non_form_errors %}
<li><p style="color: red;"> {{ error }} </p></li>
{% endfor %}
</ul>
您可以声明一个充满错误的变量,然后在最后显示一次。
class BaseNameFormSet (BaseFormSet):
...
...
...
if (firstname in firstnames) or (lastname in lastnames):
error_msg='First or last name must be unique'
if (firstname == '') or (lastname == ''):
error_msg+='<br>Both first and last name must be filled out'
if error_msg:
raise forms.ValidationError(error_msg)
如果您能够升级到 Django 1.7,您可以 raise multiple errors 通过将列表传递给 ValidationError
构造函数。
errors = []
if (firstname in firstnames) or (lastname in lastnames):
errors.append('First or last name must be unique')
if (firstname == '') or (lastname == ''):
errors.append('Both first and last name must be filled out')
if errors:
raise ValidationError(errors)
请注意,您通常不必像 if firstname == ''
那样进行检查,只需将 firstname
设为必填字段即可。您可能会发现 this question 关于在需要的表单集中制作表单很有用。
我在 Django 1.6 中使用自定义验证错误,它运行良好;但是,我一次只能显示一个错误。如果 "if" 语句中的条件失败,我该如何显示所有错误?
forms.py
class BaseNameFormSet (BaseFormSet):
...
...
...
if (firstname in firstnames) or (lastname in lastnames):
raise forms.ValidationError ('First or last name must be unique')
if (firstname == '') or (lastname == ''):
raise forms.ValidationError ('Both first and last name must be filled out')
addname.html
...
...
...
{% if formset.non_form_errors %}
<b>Please correct the error below:</b>
<ul>
{% for error in formset.non_form_errors %}
<li><p style="color: red;"> {{ error }} </p></li>
{% endfor %}
</ul>
您可以声明一个充满错误的变量,然后在最后显示一次。
class BaseNameFormSet (BaseFormSet):
...
...
...
if (firstname in firstnames) or (lastname in lastnames):
error_msg='First or last name must be unique'
if (firstname == '') or (lastname == ''):
error_msg+='<br>Both first and last name must be filled out'
if error_msg:
raise forms.ValidationError(error_msg)
如果您能够升级到 Django 1.7,您可以 raise multiple errors 通过将列表传递给 ValidationError
构造函数。
errors = []
if (firstname in firstnames) or (lastname in lastnames):
errors.append('First or last name must be unique')
if (firstname == '') or (lastname == ''):
errors.append('Both first and last name must be filled out')
if errors:
raise ValidationError(errors)
请注意,您通常不必像 if firstname == ''
那样进行检查,只需将 firstname
设为必填字段即可。您可能会发现 this question 关于在需要的表单集中制作表单很有用。