在表单字段中附加额外信息

6
我正在尝试将额外的信息传递给Django表单字段以在模板中显示。我尝试着覆盖构造函数并向字段添加另一个属性,就像这样:
self.fields['field_name'].foo = 'bar'

但是在模板中,这样写:

{{ form.field_name.foo }}

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


相关:https://dev59.com/3HE95IYBdhLWcg3wi-Uc - guettli
1个回答

7
根据 django.forms.formsForm__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
感谢您的解释。我尝试了这两种方法中的后者,它非常有效 - 再次感谢。 - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接