1

correct次のカスタム フォーム バリデータを使用して、InlineFormSet を通じてアプリケーションに複数のエントリが送信されないようにしています。

class BaseAnswerFormSet(forms.models.BaseInlineFormSet):
    def clean(self):
        if any(self.errors):
            return
        if len([d['correct'] for d in self.forms if d['correct'].value()]) !=1:
            raise forms.ValidationError("There must be one and only one correct answer")
        return

提示されたフォームオブジェクトはFalse評価されたときに返され.is_clean()ますが、エラーは返されないため、これは機能しています。pdbを処理するビューで使用すると、次のように表示されPOSTます。

(Pdb) answerformset.is_valid()
False
(Pdb) answerformset.errors
[{}, {}, {}]

raise forms.ValidationError("There must be one...エラーエントリを作成するべきではありませんか? answerformset.errorsリスト内の空の辞書のそれぞれがそれぞれの回答フォーム用であることは知っていますが、non_field_errorまたはそのようなものがあると思いましたか?

このきれいな関数を取得して、テンプレートに表示できるエラーを返すにはどうすればよいですか? これに non_field_error を追加するにはどうすればよいですか?

4

1 に答える 1

1

カスタム フォームセットの検証をお読みください。Formsetカスタム エラーには、次を使用してアクセスできますnon_form_errors

answerformset.non_form_errors()
于 2013-01-04T22:11:45.667 に答える