Django ChoiceField получить текущий выбор - PullRequest
2 голосов
/ 24 февраля 2011

У меня есть простое ChoiceField и я хочу получить доступ к «выбранному» элементу во время рендеринга моего шаблона.

Допустим, форма снова отображается (из-за ошибки в одном из полей), есть ли способ сделать что-то вроде:

<h1> The options you selected before was # {{ MyForm.delivery_method.selected }} </h1>

(. Selected () не работает ..)

Спасибо!

Ответы [ 2 ]

5 голосов
/ 24 февраля 2011

@ Юджи предложил bund_choice_field.data, однако это вернет значение, которое невидимо для пользователя (используется в value="backend-value").В вашей ситуации вы, вероятно, хотите, чтобы буквальное значение было видно пользователю (<option>literal value</option>).Я думаю, что нет простого способа получить буквальное значение из поля выбора в шаблоне.Поэтому я использую шаблонный фильтр, который делает это:

@register.filter(name='choiceval')
def choiceval(boundfield):
    """ 
    Get literal value from field's choices. Empty value is returned if value is 
    not selected or invalid.

    Important: choices values must be unicode strings.

        choices=[(u'1', 'One'), (u'2', 'Two')
    """
    value = boundfield.data or None
    if value is None:
        return u''
    return dict(boundfield.field.choices).get(value, u'')

В шаблоне это будет выглядеть так:

<h1> The options you selected before was # {{ form.delivery_method|choiceval }} </h1>

ОБНОВЛЕНИЕ: Я забыл упомянуть важную вещь, которая вам понадобитсяиспользуйте Юникод в выборе значений.Это связано с тем, что данные, возвращаемые из формы, всегда находятся в юникоде.Так что dict(choices).get(value) не будет работать, если целые числа используются в выборе.

2 голосов
/ 24 февраля 2011

К нему будет обращаться {{ myform.delivery_method.data }}

<h1> The options you selected before was # {{ MyForm.delivery_method.data }} </h1>
...