如何处理Django验证错误

时间:2012-10-20 20:02:31

标签: django forms validation

我在浏览Django表单和验证方面遇到了一些麻烦。

#views.py:
def create(request):
    if request.method == 'POST':
        form = CreateDocumentForm(request.POST)
        if form.is_valid():
            doc = Document.objects.create(name=form.cleaned_data['name'])
    #snip


#forms.py:
    class CreateDocumentForm(forms.ModelForm):
    name = forms.CharField()
    def clean_name(self):
        cleaned_name = self.cleaned_data['name']
        rgx = re.compile('^(\w|-|\.)+$')
        if rgx.match(cleaned_name) == None:
            raise ValidationError("invalidchars")
        return cleaned_name

逻辑工作正常,但我不知道如何判断引发了哪种VaidationError。另外 - 这是由Ajax请求处理的,所以我不会在repsonse中使用模板。我需要了解此视图中失败的状态。

THX

1 个答案:

答案 0 :(得分:4)

您通常不会看到ValidationErrors本身。如果你调用form.is_valid,那么验证期间发生的错误都会被收集并作为字典返回给你,form.errors

您可以检查该字典是否存在与任何特定字段相关的错误。任何有错误的字段的结果应该是为该字段引发的任何ValidationErrors的字符串值。

在您的视图中,如果form.is_valid()返回False,那么您可以这样做:

if 'name' in form.errors:
    for err_message in form.errors['name']:
        # do something with the error string