目前正在进行的代码(来自表单):
# the exception that gets raised if the form is not valid
raise forms.ValidationError("there was an error");
# here is where form.is_valid is called
form.is_valid() == False:
response['msg']=str(form.errors)
response['err']='row not updated.'
json = simplejson.dumps( response ) #this json will get returned from the view.
这个问题在于,它正在向客户端发送错误消息:
我想从返回的错误模板中删除“所有”垃圾。我该怎么做呢?似乎在django表单代码中加入了深层次。
答案 0 :(得分:2)
这是因为错误与任何字段都没有特别关联,但它就是所谓的非字段错误。
如果您只对非字段错误感兴趣,只需将其传递给响应:
response['msg']=str(form.errors['__all__'])
答案 1 :(得分:1)
errors
是dict
的子类的实例,带有一些特殊的渲染代码。大部分键都是表单的字段,但正如文档所述,在ValidationError
中引发clean
会产生一条与任何特定字段无关的错误消息:
请注意,Form.clean()覆盖引发的任何错误都不会与任何字段相关联。他们进入一个特殊的“字段”(称为
__all__
),如果需要,可以通过non_field_errors()
方法访问该字段。如果要将错误附加到表单中的特定字段,则需要访问表单上的_errors
属性,稍后将对此进行描述。
https://docs.djangoproject.com/en/dev/ref/forms/validation/
因此,您可以以不同方式生成错误的字符串表示形式(可能从form.errors.values()
或form.errors.itervalues()
开始,也可能使用默认as_text
类的ErrorList
方法)或将您的错误与文档中描述的表单的特定字段相关联:
如果确实需要将错误附加到特定字段,则应在Form._errors属性中存储(或修改)密钥。此属性是django.forms.utils.ErrorDict类的实例。但基本上,它只是一本字典。在字典中有一个键,表单中的每个字段都有错误。字典中的每个值都是一个django.forms.utils.ErrorList实例,它是一个知道如何以不同方式显示自身的列表。因此,您可以将_errors视为将字段名称映射到列表的字典。
如果要向特定字段添加新错误,则应检查密钥是否已存在于self._errors中。如果没有,则为给定键创建一个新条目,并保存一个空的ErrorList实例。在任何一种情况下,您都可以将错误消息附加到相关字段名称的列表中,并在显示表单时显示。