Ответ 1
Это может помочь:
reason = form.cleaned_data['reason']
reason = dict(form.fields['reason'].choices)[reason]
У меня есть ChoiceField, теперь как мне получить "метку", когда мне это нужно?
class ContactForm(forms.Form):
reason = forms.ChoiceField(choices=[("feature", "A feature"),
("order", "An order")],
widget=forms.RadioSelect)
form.cleaned_data["reason"]
предоставит мне только "функцию" или "порядок" или так.
Это может помочь:
reason = form.cleaned_data['reason']
reason = dict(form.fields['reason'].choices)[reason]
Смотрите документы на Model.get_FOO_display(). Итак, должно быть что-то вроде:
ContactForm.get_reason_display()
В шаблоне используйте следующее:
{{ OBJNAME.get_FIELDNAME_display }}
Это самый простой способ сделать это: Ссылка на экземпляр модели: Model.get_FOO_display()
Вы можете использовать эту функцию, которая вернет отображаемое имя: ObjectName.get_FieldName_display()
Замените ObjectName
своим именем класса и FieldName
, в поле которого вам нужно получить отображаемое имя.
Если экземпляр формы связан, вы можете использовать
chosen_label = form.instance.get_FOO_display()
Вот как я придумал. Там может быть более простой способ. Я тестировал его с помощью 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, но оно показывает, где можно найти данные.
У вас может быть ваша форма:
#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"]]
Я думаю, может быть, @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()