如何在Django中选择标签来形成ChoiceField?

web*_*kie 61 python django choicefield

我有一个ChoiceField,现在如何在需要时获得"标签"?

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

form.cleaned_data["reason"] 只会给我"特色"或"订单"左右.

sha*_*ker 117

请参阅Model.get_FOO_display()上的文档.所以,应该是这样的:

ContactForm.get_reason_display()
Run Code Online (Sandbox Code Playgroud)

在模板中,使用如下:

{{ OBJNAME.get_FIELDNAME_display }}
Run Code Online (Sandbox Code Playgroud)

  • 但它不是一个模型,它是一种形式. (31认同)
  • 有同样的问题,但有一个`ModelForm`.因此,`{{form.instance.get_FIELDNAME_display}}`对我来说就像魅力一样. (4认同)

And*_*uín 74

这可能有所帮助:

reason = form.cleaned_data['reason']
reason = dict(form.fields['reason'].choices)[reason]
Run Code Online (Sandbox Code Playgroud)

  • Django [允许分组选择](https://docs.djangoproject.com/en/2.0/ref/models/fields/#choices)。如果你有这些,这将不起作用。 (2认同)

小智 20

这是最简单的方法:模型实例引用:Model.get_FOO_display()

您可以使用此函数返回显示名称: ObjectName.get_FieldName_display()

替换ObjectName为您的类名和FieldName您需要获取显示名称的字段.

  • *NB*你在答案(3)中提到"模特"的次数和@webjunkie在问题(0)中提到它的次数. (3认同)

kru*_*ubo 7

如果绑定了表单实例,则可以使用

chosen_label = form.instance.get_FOO_display()
Run Code Online (Sandbox Code Playgroud)