5

有没有办法在字典中获取在 django 表单验证期间生成的表单错误(键为“field_name”,值为“与其相关的错误列表”),而不是它生成的默认 HTML 代码(ul & li 组合)。我没有使用生成的 HTML 代码,我只是担心字段名称和错误。

4

4 回答 4

8

没有将错误返回为的内置方法dict,但您可以使用 json.

form = MyForm(data)
print(form.errors.as_json())

文档_errors.as_json

于 2018-07-18T11:36:22.620 回答
3

当然。我在做 Ajaxed 的表单时经常使用这个类,我需要返回 JSON。根据需要调整/改进。在某些情况下,您可能希望返回以 JSON 编码的 HTML,因此我将去除 HTML 标记作为选项传递。

from django import forms
from django.template.defaultfilters import striptags

class AjaxBaseForm(forms.BaseForm):
    def errors_as_json(self, strip_tags=False):
        error_summary = {}
        errors = {}
        for error in self.errors.iteritems():
            errors.update({error[0]: unicode(striptags(error[1])
                if strip_tags else error[1])})
        error_summary.update({'errors': errors})
        return error_summary

用法:

# forms.py

class MyForm(AjaxBaseForm, forms.Form): # you can also extend ModelForm
    ...

# views.py

def my_view(request):
    form = MyForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
           ...
        else:
            response = form.errors_as_json(strip_tags=True)

        return HttpResponse(json.dumps(response, ensure_ascii=False),
            content_type='application/json')
于 2013-08-07T18:16:40.117 回答
2

通话dict()对我有用:

print(dict(form.errors))

我更喜欢这种技术,因为as_json()将特殊字符转换为 Unicode 转义序列。

于 2019-10-28T13:39:50.400 回答
1

在视图中,您可以这样做:

f = FooForm(data)
f.errors
于 2013-08-07T18:09:19.623 回答