Django - 尝试访问表单中的字段时的AttributeError

时间:2011-07-19 15:08:31

标签: django

我有一个表格:

class FooForm(forms.Form):
    a_field = forms.CharField()
    not_a_field = 'hello world'

在实例化这个并尝试访问该字段时,我得到了一个

>>> from baz.views import FooForm
>>> f = FooForm()
>>> f.not_a_field
'hello world'
>>> f.a_field
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'FooForm' object has no attribute 'a_field'

发生了什么事?

3 个答案:

答案 0 :(得分:4)

Form的设计方式,属性将作为属性删除,并添加到fields属性中。这样做是为了我们可以使用声明性语法来定义我们的Form,但是可以在时间到来时遍历字段。

>>> f = FooForm()
>>> f.fields['a_field']
<django.forms.fields.CharField object at 0x1750350>

你可以在两个地方找到这个的逻辑。 django/forms/forms.py包含类DeclarativeFieldsMetaclass和方法get_declared_fields。这两位包含将所有内容移动到fields列表中的逻辑。

答案 1 :(得分:1)

表格字段可通过“字段”属性访问。

来自shell:

>>> f = FooForm()
>>> f.fields['a_field']

将返回:

<django.forms.fields.CharField object at [memory location]>

除非它有值,否则您将无法使用f.a_field访问该字段。

答案 2 :(得分:-1)

那是因为a_field没有初始化 例如:

>>> f.a_field = 'hi'
>>> print f.a_field
'hi'

你必须添加数据并在那里执行save()