웹프로그래밍/Django
[Django] ChoiceField 사용하기
ssung.k
2019. 7. 6. 17:17
사용자한테 값을 입력 받을 때, checkbox
나 radio
등을 이용해서 값을 받는 경우도 자주 볼 수 있습니다. django 기본 db인 sqlite3 의 경우에는 이 값을 model
에서는 어떤 필드로 받아주는게 좋을까요? 이에 대해서 알아보도록 하겠습니다.
ChoiceField
기본적으로 ChoiceField
는 따로 존재하지 않습니다. 그렇기 때문에 다른 field 에 choice의 기능을 추가해줘야하는데 CharField
를 기본으로 합니다. 예시를 통해서 알아보겠습니다.
# models.py
from django.db import models
class Person(models.Model):
NATIONAL_CHOICES = (
('AD', 'Andorra'),
('AF', 'Afghanistan'),
('AG', 'Antigua'),
...
)
nationality = models.CharField(max_length=2, choices=NATIONAL_CHOICES)
NATIONAL_CHOICES
라는 2중 튜플을 만들고 이를 CharField
에 choices
옵션과 연결 해줍니다. 이럴 경우, 튜플의 앞에 값은 db에 저장되는 값, 뒤에 값은 admin 페이지나 폼에서 표시하는 값이 됩니다.
templates 에서 값 출력
template
변수를 통해서 db에 저장된 값을 출력할 수가 있습니다.
# main.html
{{ person.nationality }} # AD
하지만 db 에 값은 사용자가 보기에는 불편할 수도 있는 축약된 형태로 저장하기 때문에 이 값이 아닌, 튜플의 두 번째 값을 출력하기를 원할 경우도 있습니다. 그럴 경우에, get_필드명_display
으로 이를 얻을 수 있습니다.
# main.html
{{ person.get_nationality_display }} # Andorra