将附加信息附加到表单字段

时间:2010-07-10 14:35:03

标签: python django django-forms

我正在尝试将其他信息传递给Django表单的字段以显示在模板中。我试图覆盖构造函数并将另一个属性添加到字段中,如下所示:

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

但在模板中:

{{ form.field_name.foo }}

没有打印任何东西。有没有人知道如何在不重写/继承表单字段类的情况下向字段添加其他信息?

1 个答案:

答案 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