Хорошо, у меня есть несколько сложная форма с большим количеством сложной бизнес-логики, и в результате я фактически создаю поля на лету, когда форма создается.Мне нужно иметь доступ к полям в шаблоне, но, конечно, поскольку они сгенерированы, я не могу просто сделать что-то вроде {{ form.fieldname }}
, потому что в этом случае fieldname
на самом деле создается из переменной.
Я попробовал что-то вроде этого в форме:
def __init__(self, *args, **kwargs):
# initialization code is here, so let's just skip that
self.items = kwargs.pop("items", [])
self.my_fields = []
for item in self.items:
self.fields['item_%d' % item.pk]=forms.CharField(required=True, label=item.name)
self.my_fields.append(self.fields['item_%d' % item.pk])
Однако в шаблоне, когда я пытаюсь это сделать:
{% for field in self.my_fields %}
{{ field }}
{% endfor %}
я получаю что-то вроде <django.forms.fields.CharField object at 0x2b08aeb45810>
Есть ли способ сделать это, чтобы я мог получить фактическое визуализированное поле?
Обновление
Похоже, что визуализированные поля имеют тип django.forms.forms.BoundField
и создаются при вызове __getitem__
на объекте field
.В принципе, я думаю, мне нужен какой-то способ создать что-то, что ведет себя так, как будто hidden_fields
содержит только мои поля.