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

Max*_*Max 5 python django django-forms

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

self.fields['field_name'].foo = 'bar'
Run Code Online (Sandbox Code Playgroud)

但在模板中:

{{ form.field_name.foo }}
Run Code Online (Sandbox Code Playgroud)

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

eru*_*orm 6

根据django.forms.forms,a的__getitem__()方法在返回之前Form创建一个叫做BoundFieldout of the Field的东西,从而剥离你所做的任何改变.如果你真的想在其中插入更多功能,请在返回之前覆盖该方法以对绑定字段执行操作:

class MyForm(forms.Form):
    def __getitem__(self, name):
        boundfield = super(forms.Form,self).__getitem__(name)
        boundfield.foo = "bar"
        return boundfield
Run Code Online (Sandbox Code Playgroud)

然后,"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"
Run Code Online (Sandbox Code Playgroud)

然后,要foo在模板中访问:

{{ form.field_name.field.foo }}
Run Code Online (Sandbox Code Playgroud)