我試圖將附加信息傳遞給要在模板中顯示的Django表單的字段。我試圖重寫構造函數和其他屬性添加到現場是這樣的:將附加信息附加到表單字段
self.fields['field_name'].foo = 'bar'
,但在模板這樣的:
{{ form.field_name.foo }}
沒有打印任何東西。有誰知道如何在不重寫/繼承表單字段類的情況下向字段添加額外信息?
我試圖將附加信息傳遞給要在模板中顯示的Django表單的字段。我試圖重寫構造函數和其他屬性添加到現場是這樣的:將附加信息附加到表單字段
self.fields['field_name'].foo = 'bar'
,但在模板這樣的:
{{ form.field_name.foo }}
沒有打印任何東西。有誰知道如何在不重寫/繼承表單字段類的情況下向字段添加額外信息?
根據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 }}
感謝在t他的解釋。我嘗試了這兩種方法中的後者,並且它像一個魅力一樣工作 - 再次感謝。 – Max 2010-07-11 07:50:50
相關:http://stackoverflow.com/questions/2270550/warnings-or-even-info-messages-instead-of-only-errors-in-django – guettli 2014-08-13 08:42:44