当前位置:  开发笔记 > 编程语言 > 正文

将错误注入已经过验证的表单中?

如何解决《将错误注入已经过验证的表单中?》经验,为你挑选了3个好方法。

form.Form验证用户输入值后,我将它们传递给单独的(外部)进程以进行进一步处理.此外部进程可能会在值中发现更多错误.

有没有办法将这些错误注入已经验证的表单中,以便通过常用的表单错误显示方法显示它们(或者有更好的替代方法)?

一个建议是在表单验证中包含外部处理,这不是理想的,因为外部流程不仅仅需要验证.



1> rstuart85..:

对于Django 1.7+,您应该使用form.add_error()而不是form._errors直接访问.

文档:https://docs.djangoproject.com/en/stable/ref/forms/api/#django.forms.Form.add_error



2> John Milliki..:

Form._errors可以像标准字典一样对待.它被认为是使用ErrorList该类的好方法,并将错误附加到现有列表:

from django.forms.utils import ErrorList
errors = form._errors.setdefault("myfield", ErrorList())
errors.append(u"My error here")

如果要添加非字段错误,请使用django.forms.forms.NON_FIELD_ERRORS(默认为"__all__")而不是"myfield".


这是令人难以置信的非pythonic.实现form.errors ['myfield'].append(my_error)或form.add_error('myfield',my_error)有多难?在当前实现中有很大的错误空间(没有双关语意).
@迈克尔 - 看起来他们把您的意见... [Django的开发 - Form.add_error(场,错误)(https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms .Form.add_error)
这似乎有点不愉快,因为名称“ _errors”表明它应该在表单类内部。这是在Django中执行此操作的标准方法吗?我与OP的情况类似:我有一个表单,用户可以在其中提供一个在数据库中必须唯一的新名称。如果发生冲突,我想将表单发送回去,但上面有错误,但是直到我真正尝试执行数据库插入操作时,我才知道。(理论上,验证器可以检查数据库,但是它闻起来很容易产生种族竞争。)
大部分完成。还有一点需要注意的是,如果未调用is_valid(),则需要设置form._errors = ErrorDict()

3> Jonny Buchan..:

您可以_errors直接向表单的属性添加其他错误详细信息:

https://docs.djangoproject.com/en/1.5/ref/forms/validation/#described-later https://docs.djangoproject.com/en/1.6/ref/forms/validation/#modifying-field-errors


显然在1.6后的开发版中,他们正在添加一个`add_error`函数:https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.Form.add_error
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有