반응형
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
. 이 도움을 바랍니다
반응형
'IT박스' 카테고리의 다른 글
작업 표시 줄 뒤로 버튼이 작동하지 않음 (0) | 2020.11.29 |
---|---|
Swift에서 숫자 만 취하도록 UITextField를 제한하는 방법은 무엇입니까? (0) | 2020.11.29 |
반짝이는 4 개의 작은 텍스트 입력 상자 나란히 (0) | 2020.11.29 |
formGroup의 Angular2 설정 값 (0) | 2020.11.29 |
숫자 테이블을 만들고 채우는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.29 |