ChoiceFieldがありますが、必要なときに「ラベル」を取得する方法を教えてください。
class ContactForm(forms.Form):
reason = forms.ChoiceField(choices=[("feature", "A feature"),
("order", "An order")],
widget=forms.RadioSelect)
form.cleaned_data["reason"]
は、「機能」または「注文」などしか表示しません。
これは役立つかもしれません:
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
をクラス名に、FieldName
を表示名を取得する必要があるフィールドに置き換えます。
フォームインスタンスがバインドされている場合、使用できます
chosen_label = form.instance.get_FOO_display()
ここに私が思いついた方法があります。もっと簡単な方法があるかもしれません。 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ではありませんが、必要なデータがどこにあるかを示しています。
次のようなフォームを作成できます。
#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"]]
@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
。この助けを願っています
@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()