Прикрепление дополнительной информации к полям формы - PullRequest
5 голосов
/ 10 июля 2010

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

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

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

{{ form.field_name.foo }}

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

1 Ответ

6 голосов
/ 10 июля 2010

Согласно 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 }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...