Подтвердить что ты не робот

Как получить ярлык выбора в Django Form ChoiceField?

У меня есть ChoiceField, теперь как мне получить "метку", когда мне это нужно?

class ContactForm(forms.Form):
     reason = forms.ChoiceField(choices=[("feature", "A feature"),
                                         ("order", "An order")],
                                widget=forms.RadioSelect)

form.cleaned_data["reason"] предоставит мне только "функцию" или "порядок" или так.

4b9b3361

Ответ 1

Это может помочь:

reason = form.cleaned_data['reason']
reason = dict(form.fields['reason'].choices)[reason]

Ответ 2

Смотрите документы на Model.get_FOO_display(). Итак, должно быть что-то вроде:

ContactForm.get_reason_display()

В шаблоне используйте следующее:

{{ OBJNAME.get_FIELDNAME_display }}

Ответ 3

Это самый простой способ сделать это: Ссылка на экземпляр модели: Model.get_FOO_display()

Вы можете использовать эту функцию, которая вернет отображаемое имя: ObjectName.get_FieldName_display()

Замените ObjectName своим именем класса и FieldName, в поле которого вам нужно получить отображаемое имя.

Ответ 4

Если экземпляр формы связан, вы можете использовать

chosen_label = form.instance.get_FOO_display()

Ответ 5

Вот как я придумал. Там может быть более простой способ. Я тестировал его с помощью python manage.py shell:

>>> cf = ContactForm({'reason': 'feature'})
>>> cf.is_valid()
True
>>> cf.fields['reason'].choices
[('feature', 'A feature')]
>>> for val in cf.fields['reason'].choices:
...     if val[0] == cf.cleaned_data['reason']:
...             print val[1]
...             break
...
A feature

Примечание. Это, вероятно, не очень Pythonic, но оно показывает, где можно найти данные.

Ответ 6

У вас может быть ваша форма:

#forms.py
CHOICES = [('feature', "A feature"), (order", "An order")]
class ContactForm(forms.Form):
     reason = forms.ChoiceField(choices=CHOICES,
                                widget=forms.RadioSelect)

Тогда это даст вам то, что вы хотите:

reason = dict(CHOICES)[form.cleaned_data["reason"]]

Ответ 7

Я думаю, может быть, @webjunkie прав.

Если вы читаете форму из POST, вы бы сделали

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            contact = form.save()
            contact.reason = form.cleaned_data['reason']
            contact.save()