Тег шаблона Django для получения определенного поля формы - PullRequest
2 голосов
/ 24 мая 2011

У меня есть приложение для опроса, которое создает формы динамического размера. Я использую формулу «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 должен быть как-то доступен как метод на поле - но я не могу понять, каким будет этот метод. Я что-то упускаю из виду?

1 Ответ

2 голосов
/ 24 мая 2011

Попробуйте:

@register.simple_tag
def get_field_for_question_part(question_id, form, part):
    field_name = "question_%s_%s" % (question_id, part)
    return form.__getitem__(field_name)

См. Определение метода в строке 101 здесь: django / forms / forms.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...