2010-07-10 73 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