我有一个ChoiceField,现在如何在需要时获得“标签”?
class ContactForm(forms.Form):
reason = forms.ChoiceField(choices=[("feature", "A feature"),
("order", "An order")],
widget=forms.RadioSelect)
form.cleaned_data["reason"]
只会给我“功能”或“订单”左右。
答案 0 :(得分:114)
请参阅Model.get_FOO_display()上的文档。所以,应该是这样的:
ContactForm.get_reason_display()
在模板中,使用如下:
{{ OBJNAME.get_FIELDNAME_display }}
答案 1 :(得分:69)
这可能有所帮助:
reason = form.cleaned_data['reason']
reason = dict(form.fields['reason'].choices)[reason]
答案 2 :(得分:17)
这是最简单的方法:Model instance reference: Model.get_FOO_display()
您可以使用此功能返回显示名称:ObjectName.get_FieldName_display()
将ObjectName
替换为您的班级名称,将FieldName
替换为您需要获取其显示名称的字段。
答案 3 :(得分:6)
如果绑定了表单实例,则可以使用
chosen_label = form.instance.get_FOO_display()
答案 4 :(得分:4)
这是我想出的一种方式。可能有一种更简单的方法。我使用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,但它可以显示您需要的数据。
答案 5 :(得分:2)
您的表单可以这样:
#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"]]
答案 6 :(得分:2)
好。我知道这是非常的旧帖子,但是阅读它对我有很大帮助。我想我要补充些东西。
问题的症结在于模型方法。
ObjectName.get_FieldName_display()
不适用于表格。
如果您有一个不基于模型的表单,并且该表单具有选择字段,那么如何获取给定选择的显示值。
以下一些代码可能会对您有所帮助。
您可以使用此代码从发布的表单中获取选择字段的显示值。
display_of_choice = dict(dateform.fields['fieldnane'].choices)[int(request.POST.get('fieldname'))]
根据选择选择为整数的情况,存在“ int”。如果选择索引是字符串,则只需删除int(...)
答案 7 :(得分:0)
我想也许@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()
答案 8 :(得分:0)
我正在使用@AndrésTorresMarroquín的方式,我想分享我的实现。
GOOD_CATEGORY_CHOICES = (
('paper', 'this is paper'),
('glass', 'this is glass'),
...
)
class Good(models.Model):
...
good_category = models.CharField(max_length=255, null=True, blank=False)
....
class GoodForm(ModelForm):
class Meta:
model = Good
...
good_category = forms.ChoiceField(required=True, choices=GOOD_CATEGORY_CHOICES)
...
def clean_good_category(self):
value = self.cleaned_data.get('good_category')
return dict(self.fields['good_category'].choices)[value]
结果是this is paper
而不是paper
。
希望有帮助