Django의 모델링을 진행하다 보면 선택값을 사용하기 위해 choices 옵션 값을 사용하는 경우가 있다.
from django.db import models
class Book(models.Model):
BOOK_CHOICES = (
(0, '추리소설'),
(1, '수필'),
(2, '시'),
(3, '고전문학'),
)
title = models.CharField(max_lenth=30)
genre = models.CharField(max_length=10, choices=BOOK_CHOICES)
이 경우 book_genre는 0, 1, 2, 3의 값으로 저장이 되며 별 다른 처리를 하지 않으면 저장된 값과 같은 0, 1, 2, 3의 값으로 출력이 된다. BOOK_CHOICES의 오른쪽 값, 즉 0인 경우 '추리소설'을, 1인 경우 '수필'이라는 값을 보여주고 싶은 경우 get_xxx_display() 함수를 사용하면 된다.
>>> b = Book(title="어느 추운 날", genre=1)
>>> b.save()
>>> b.genre
1
>>> b.get_genre_display()
'수필'
또는 DRF를 사용한다면 serializer에서 get_xxx_display() 함수를 아래와 같이 사용하여 보여지는 값을 설정할 수 있다.
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = "__all__"
genre = serializers.SerializerMethodField()
def get_genre(self, obj):
return obj.get_genre_display()