我正在尝试将其他信息传递给Django表单的字段以显示在模板中。我试图覆盖构造函数并将另一个属性添加到字段中,如下所示:
self.fields['field_name'].foo = 'bar'
但在模板中:
{{ form.field_name.foo }}
没有打印任何东西。有没有人知道如何在不重写/继承表单字段类的情况下向字段添加其他信息?
答案 0 :(得分:6)
根据django.forms.forms
,__getitem__()
Form
方法会在返回之前在字段外创建一个名为BoundField
的内容,从而剥离您所做的任何更改。如果你真的想在其中添加更多功能,请在返回之前覆盖该方法以对stuff字段执行操作:
class MyForm(forms.Form):
def __getitem__(self, name):
boundfield = super(forms.Form,self).__getitem__(name)
boundfield.foo = "bar"
return boundfield
然后,"bar"
将出现在该表单中的所有字段中。您也可以创建一个函数并调用它,使其不仅仅是一个硬编码的字符串。
虽然添加更多字段或向表单本身添加属性更为标准,但如果您有每个字段需要包含的全新信息类,则可以为您执行此操作。
另一种获得相同功能的方法是编辑字段的属性,然后通过BoundField
的{{1}}属性访问它:
"field"
然后,要访问模板中的class MyForm(forms.Form):
def __init__(self, *args, **kwargs)
super(forms.Form, self).__init__(*args, **kwargs)
self.fields['field_name'].foo = "bar"
:
foo