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

それとも、それらを 2 つの別個の弾丸として使用したかったのですか? その場合は、それらを self.errors リストに追加して (アレクサンダーの回答を参照)、フォームが処理されないように 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 に答える