IT박스

Django 양식 ChoiceField에서 선택 레이블을 얻는 방법은 무엇입니까?

itboxs 2020. 11. 29. 10:08
반응형

Django 양식 ChoiceField에서 선택 레이블을 얻는 방법은 무엇입니까?


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"]]

@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()

@ Andrés Torres Marroquí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. 이 도움을 바랍니다

참고 URL : https://stackoverflow.com/questions/761698/how-to-get-the-label-of-a-choice-in-a-django-forms-choicefield

반응형