Я пытаюсь передать дополнительную информацию полям формы Django, которая будет отображена в шаблоне. Я пытался переопределить конструктора и добавить другое свойство к полю как это:
self.fields['field_name'].foo = 'bar'
но в шаблоне это:
{{ form.field_name.foo }}
ничего не распечатал. Кто-либо знает, как добавить дополнительную информацию к полю, не переписывая/наследовав полевые классы форм?
Согласно django.forms.forms
, __getitem__()
метод Form
создает нечто, называемое 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 }}