Присоединение дополнительной информации для формирования полей

Я пытаюсь передать дополнительную информацию полям формы Django, которая будет отображена в шаблоне. Я пытался переопределить конструктора и добавить другое свойство к полю как это:

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

но в шаблоне это:

{{ form.field_name.foo }}

ничего не распечатал. Кто-либо знает, как добавить дополнительную информацию к полю, не переписывая/наследовав полевые классы форм?

5
задан David Cain 28 January 2013 в 22:43
поделиться

1 ответ

Согласно 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 }}
6
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: