Django 1.2: настраиваемое поле формы? - PullRequest
1 голос
/ 04 октября 2010

У меня есть динамическая форма, которая содержит одно или несколько полей MultipleChoiceFields или ChoiceFields.Я хочу отобразить инструкцию для пользователя, например, для ChoiceField: «Выберите одно из следующего», а для MultipleChoiceField: «Выберите любое из следующего» * ​​1001 *

Как я могу это сделать?Я попытался создать подклассы для каждого из этих полей, но не смог вернуть значение в шаблон.

Спасибо

РЕДАКТИРОВАТЬ

Я пробовал что-то вроде:

class MultiWithInstruction(forms.MultipleChoiceField):
    def __init__(self, instruction=None, **kwargs):
        self.instruction=instruction
        return super(MultiWithInstruction, self).__init__(**kwargs)

Я не смог получить значение 'инструкции' в шаблоне.

Ответы [ 3 ]

0 голосов
/ 04 октября 2010

Вы можете установить значение метки в поле формы:

myfield = forms.MultipleChoiceField(label='Select any of the following')
0 голосов
/ 29 октября 2010

У меня была такая же проблема. Я не мог найти простой способ (без переопределения многих вещей из django.forms), поэтому я нашел это быстрое и грязное решение.

Определить новый шаблонный фильтр, который разбивает строку на список с учетом разделителя; см. этот простой фрагмент от Ciantic. Сохранить фрагмент как templatetags/whatever_name.py.

В forms.py заполните атрибут help_text поля вашей строкой справки и инструкции, разделенных символом «#» (конечно, вы можете выбрать любой разделитель, какой захотите); что-то вроде

my_field = forms.MultipleChoiceField(help_text = '%s#%s' % (help_string, instruction_string), ...)

help_text - это строка (уже помеченная как безопасная), поэтому вы не можете поместить в нее список (именно поэтому необходим пользовательский фильтр разделения).

И это пример шаблона, который показывает строки справки и инструкции для каждого поля в форме:

{% load whatever_name %}

{% for field in form %}
    help: {% filter split:"#"|first %}{{ field.help_text }}{% endfilter %}
    instruction: {% filter split:"#"|last %}{{ field.help_text }}{% endfilter %}
{% endfor %}

Очевидно, что вы не можете использовать as_p, as_table и as_ul для визуализации формы.

0 голосов
/ 04 октября 2010

Почему бы просто не использовать help_text?

class MyForm(forms.Form):
    my_field = forms.MultipleChoiceField(help_text='Pick one of these', ....)

И тогда в шаблоне вы можете сделать что-то вроде этого:

<p>{{ field.label_tag }}: {{ field }}</p>
{% if field.help_text %}<p class="help_text">{{ field.help_text|safe }}</p>{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...