向表单字段附加额外信息
我正在尝试向Django表单的字段传递一些额外的信息,以便在模板中显示。我试着重写构造函数,并像这样给字段添加另一个属性:
self.fields['field_name'].foo = 'bar'
但是在模板中,这个:
{{ form.field_name.foo }}
什么都没有打印出来。有没有人知道怎么在不重写或继承表单字段类的情况下,给字段添加额外的信息?
1 个回答
7
根据 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 }}