2010-07-10 74 views
5

我試圖將附加信息傳遞給要在模板中顯示的Django表單的字段。我試圖重寫構造函數和其他屬性添加到現場是這樣的:將附加信息附加到表單字段

self.fields['field_name'].foo = 'bar' 

,但在模板這樣的:

{{ form.field_name.foo }} 

沒有打印任何東西。有誰知道如何在不重寫/繼承表單字段類的情況下向字段添加額外信息?

+0

相關:http://stackoverflow.com/questions/2270550/warnings-or-even-info-messages-instead-of-only-errors-in-django – guettli 2014-08-13 08:42:44

回答

6

根據django.forms.forms,一個Form__getitem__()方法創建一種叫做BoundField出了場返回之前,從而剝奪它的你做任何改變。如果你真的想插入更多的功能是,重寫這個方法返回之前做的東西到綁定字段:

class MyForm(forms.Form): 
    def __getitem__(self, name): 
     boundfield = super(forms.Form,self).__getitem__(name) 
     boundfield.foo = "bar" 
     return boundfield 

然後,"bar"將出現在表格的所有字段。您也可以創建一個函數並調用它,使其不僅僅是一個硬編碼的字符串。

儘管添加更多字段或向表單本身添加屬性更爲標準,但如果您有一個全新的每個字段都需要包含的信息類別,則可能會爲您執行此操作。


另一種方式來獲得同樣的事情,是編輯的字段的屬性,然後通過BoundField"field"屬性訪問:

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs) 
     super(forms.Form, self).__init__(*args, **kwargs) 
     self.fields['field_name'].foo = "bar" 

然後,訪問foo在模板:

{{ form.field_name.field.foo }} 
+1

感謝在t他的解釋。我嘗試了這兩種方法中的後者,並且它像一個魅力一樣工作 - 再次感謝。 – Max 2010-07-11 07:50:50