【问题标题】:Django validation array of errorsDjango 验证错误数组
【发布时间】:2010-10-24 14:00:24
【问题描述】:

我正在使用

rf['email'].errors

正如文档中所说,我可以使用它来产生一系列错误。

[str(e) for e in rf['email'].errors]  #give me ["<django.utils.functional.__proxy__>"]

如果 repr 或 str - 它给出 ul 或数组字符串。

所以它只有在我同时使用 repr 和 eval 时才有效。但我认为这是愚蠢的解决方案。

eval(`rf['email'].errors`)

【问题讨论】:

  • 如果您不介意,请澄清几点: 1) rf 是 django 表单吗?和 rf['email'] 一个 django FormField? 2)你想得到什么输出?它是错误的 HTML 字符串吗?还是别的什么?
  • 1. rf 是表格; 2. rf['email'] 是FormField; 3.我正在尝试实现json。我使用表单进行验证。

标签: django django-forms django-validation


【解决方案1】:

您有几个选项,具体取决于您想要的输出。

方案一,使用unicode构造函数转换数据:

list_of_error_texts = [unicode(e) for e in rf['email'].errors]

(Django的代理对象实现了响应unicode的方法。)

选项二,获取 ErrorList 作为文本。这会生成一个以换行符分隔的错误文本列表,每行前面都有一个星号:

print rf['email'].errors.as_text()
* My error one
* My error two

选项三,使用django的force_unicode函数。这类似于unicode,但有一些额外的安全功能:

from django.utils.encoding import force_unicode
list_of_error_texts = [force_unicode(e) for e in rf['email'].errors]

【讨论】:

  • 你知道为什么文档中解释的行为不起作用,我们必须像你一样做吗?
  • 文档承诺您可以遍历字段错误,但文档中的唯一示例 (AFAICT) 在模板中,而不是在 python 中作为编写的 OP。当循环从 rf['email'] 返回的 ErrorList 时,您会得到一系列 ValidationError 对象。 Django 的模板基础结构在它们上调用 force_unicode(),它首先检查它们是否具有 'unicode' 方法。既然他们这样做了,就会调用它,而不是 OP 示例的 str() 。所以我不会说文档中的行为不起作用,只是示例不包括 OP 的场景:-)
猜你喜欢
  • 2013-07-27
  • 1970-01-01
  • 2010-12-26
  • 2017-10-02
  • 2016-03-20
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多