수학과의 좌충우돌 프로그래밍

[Django] ChoiceField 사용하기 본문

웹프로그래밍/Django

[Django] ChoiceField 사용하기

ssung.k 2019. 7. 6. 17:17

사용자한테 값을 입력 받을 때, checkboxradio 등을 이용해서 값을 받는 경우도 자주 볼 수 있습니다. 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중 튜플을 만들고 이를 CharFieldchoices 옵션과 연결 해줍니다. 이럴 경우, 튜플의 앞에 값은 db에 저장되는 값, 뒤에 값은 admin 페이지나 폼에서 표시하는 값이 됩니다.

 

templates 에서 값 출력

template 변수를 통해서 db에 저장된 값을 출력할 수가 있습니다.

# main.html

{{ person.nationality }} # AD

하지만 db 에 값은 사용자가 보기에는 불편할 수도 있는 축약된 형태로 저장하기 때문에 이 값이 아닌, 튜플의 두 번째 값을 출력하기를 원할 경우도 있습니다. 그럴 경우에, get_필드명_display 으로 이를 얻을 수 있습니다.

# main.html

{{ person.get_nationality_display }} # Andorra

 

Comments