我有一个表格:
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'
发生了什么事?
答案 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()