在django中,form.errors ['field_name']和form ['field_name']之间的区别是什么。

时间:2013-09-17 07:18:49

标签: python django forms

>>> f = ContactForm({'subject': 'Hello', 'message': ''})
>>> f.errors['message']
>>> [u'This field is required.']
>>> f['message'].errors
>>> [u'This field is required.']

与第3和第3相比有什么不同?第5行?他们有不同的目的吗?

1 个答案:

答案 0 :(得分:0)

当您访问f['message'].errors时,您正在使用BoundField.errors属性。

如果查看源代码,可以看到BoundField.errors尝试从表单的错误中获取错误列表(如果存在)。

@property
def errors(self):
    """
    Returns an ErrorList for this field. Returns an empty ErrorList
    if there are none.
    """
    return self.form.errors.get(self.name, self.form.error_class())

如果字段没有错误,BoundField.error属性将返回一个空错误列表,因此行为略有不同。

>>> f = ContactForm({'subject': 'Hello', 'message': 'world!'})
>>> f.errors
{}
>>> f.errors['message']
KeyError
>>> f['message'].errors
>>> []

在字段上具有此errors属性可以轻松遍历模板中的表单字段,并显示错误。

{% for field in form %}
    {{ field }}
    {{ field.errors }}
{% endfor %}