如何获得Django的select标签formsChoiceField?
我有一个ChoiceField,现在当我需要的时候如何获得“标签”?
class ContactForm(forms.Form): reason = forms.ChoiceField(choices=[("feature", "A feature"), ("order", "An order")], widget=forms.RadioSelect)
form.cleaned_data["reason"]
只会给我“function”或“秩序”左右。
这可能有助于:
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
replace为您的类名和FieldName
,其中您需要获取显示名称的字段。
如果表单实例被绑定,您可以使用
chosen_label = form.instance.get_FOO_display()
这是我想出的方法。 可能有一个更简单的方法。 我使用python manage.py shell
来testing它:
>>> 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,但它显示了你需要的数据可以find的地方。
你可以有这样的forms:
#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()