我在浏览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
答案 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