如何获得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()

ObjectNamereplace为您的类名和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() 
Interesting Posts