2011-07-19 37 views
1

我有地方的表單字段時AttributeError的:的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' 

什麼正在進行?

+0

你有沒有嘗試在調用它之前初始化f.a_field? – Luke

回答

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列表中的邏輯。

+0

我沒有看到任何替代方案,但get_declared_fields現在已被棄用。 – christophe31

-1

這是因爲a_field未初始化 例如:

>>> f.a_field = 'hi' 
>>> print f.a_field 
'hi' 
你必須添加數據,並執行保存

()有

+0

這是不正確的。 –

1

表單字段accessable通過「領域」屬性。

從外殼:

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

將返回:

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

您將無法訪問使用f.a_field,除非它有一個值的字段。

相關問題