附加到 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 关于在需要的表单集中制作表单很有用。