71

を持っていますが、必要なときにラベルChoiceFieldを取得するにはどうすればよいですか?

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

form.cleaned_data["reason"]featureまたはorder かそこらしかくれません。

4

9 に答える 9

147

Model.get_FOO_display()のドキュメントを参照してください。したがって、次のようになります。

ContactForm.get_reason_display()

テンプレートでは、次のように使用します。

{{ OBJNAME.get_FIELDNAME_display }}
于 2009-04-18T03:28:26.147 に答える
87

これは役立つかもしれません:

reason = form.cleaned_data['reason']
reason = dict(form.fields['reason'].choices)[reason]
于 2011-09-29T17:14:51.320 に答える
24

これを行う最も簡単な方法:モデル インスタンス リファレンス: Model.get_FOO_display()

表示名を返すこの関数を使用できます。ObjectName.get_FieldName_display()

ObjectNameクラス名とFieldName、表示名を取得する必要があるフィールドに置き換えます。

于 2012-03-05T21:40:16.783 に答える
9

フォームインスタンスがバインドされている場合は、使用できます

chosen_label = form.instance.get_FOO_display()
于 2012-04-07T02:18:21.143 に答える
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 ではありませんが、必要なデータがどこにあるかを示しています。

于 2009-04-17T20:06:40.827 に答える
3

次のようなフォームを作成できます。

#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"]]
于 2012-05-09T11:20:24.367 に答える
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()
于 2010-10-25T22:57:07.377 に答える