Django Choices 와 get_xxx_display()

윤현묵·2023년 1월 24일
0

Django

목록 보기
16/17
post-thumbnail

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()
profile
진정성 있는 개발자를 꿈꾼다

0개의 댓글