将错误插入InlineFormSet自定义验证程序

时间:2013-01-04 20:19:52

标签: django error-handling django-forms inline-formset

我使用以下自定义表单验证程序,以确保通过InlineFormSet向我的应用程序提交的条目不多于一个correct

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?

1 个答案:

答案 0 :(得分:1)

请阅读Custom Formset Validation。可以使用Formset

访问non_form_errors个自定义错误
answerformset.non_form_errors()