0

我有这段代码可以检查表单中的错误。用户犯一些错误后,它会显示第一个发现的错误。但是如果错误属于多个错误,它将只显示第一个错误。

#forms.py
    def clean_file_name(self):
        name = self.cleaned_data['file_name']
        if len(name) < 2:
            raise forms.ValidationError('File name is too short')
        if FileDescription.objects.filter(file_name = name).exists():
            raise forms.ValidationError('File with this name already exists')
        else:
            return name

#template
<ul>
  {% for field in form %}
    {% for error in field.errors %}
    <li>{{ error }}</li>
    {% endfor %}
  {% endfor %}
</ul>

如果用户将输入“a”并且数据库中具有此名称的文件已经存在(假设它在我写长度检查之前就在那里)输出将是:

“文件名太短”

但我希望显示两个错误

4

2 回答 2

1

这个怎么样?

def clean_file_name(self):
    name = self.cleaned_data['file_name']
    error = ''
    if len(name) < 2:
        error += 'File name is too short'
    if FileDescription.objects.filter(file_name = name).exists():
        if error:
            error += ' ' 
        error += 'File with this name already exists'
    if error:
        raise forms.ValidationError(error)
    return name

还是您希望它们作为两个单独的子弹?如果是这样,您需要将它们添加到 self.errors 列表(请参阅 Alexander 的回答),然后引发 ValidationError 以确保表单不会处理。

于 2012-08-06T20:15:19.887 回答
0

从我的代码中,希望它有所帮助。

if isinstance(self.errors.get('field_name'), forms.util.ErrorList):
    self.errors['field_name'].append(_('My error'))
else:
    self.errors['field_name'] = forms.util.ErrorList([_('MyError')])
于 2012-08-06T19:44:11.497 回答