2

我在理解 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 请求处理的,所以我不会在响应中使用模板。我需要获取此视图中失败的状态。

谢谢

4

1 回答 1

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
于 2012-10-20T20:15:46.703 回答