У меня есть приложение для опроса, которое создает формы динамического размера. Я использую формулу «question_id_part», где вопрос является фиксированным, id - это идентификатор задаваемого вопроса, а часть - одна из трех частей.
В моем шаблоне мне нужно иметь возможность группировать их по категориям, поэтому я перебираю категории в опросе, получаю все вопросы в этой категории, а затем у меня есть тег шаблона, чтобы получить поле формы.
{% load my_tags %}
...
{% for category in survey.category_set.all %}
<h3>{{category}}</h3>
{% for question in category.factor_set.all %}
{% get_field_for_question_part question.id form "type" %}
{% endfor %}
{% endfor %}
...
Тогда у меня есть соответствующий шаблон тега, который выглядит следующим образом:
@register.simple_tag
def get_field_for_question_part(question_id, form, part):
field_name = "question_%s_%s" % (question_id, part)
field = form.fields[field_name]
return BoundField(form, field, field_name)
Мой вопрос такой:
Благодаря явному импорту BoundField мой шаблонный тег слишком много знает о том, как формы работают внутри, и, следовательно, является хрупким для будущих изменений в непубличном поведении форм. Таким образом, мне кажется, что BoundField должен быть как-то доступен как метод на поле - но я не могу понять, каким будет этот метод. Я что-то упускаю из виду?