상세 컨텐츠

본문 제목

[Django-Model] Choices 필드 레이블 표시 방법

Backend/Django

by G_Batman 2024. 7. 9. 17:27

본문

728x90

안녕하세요. 배트맨입니다.🦇

Django 프로젝트를 개발하다 보면 Choices 필드에 대해서 값을 레이블로 표시하면 사용자에게 더 좋은 경험을 제공할 수 있을 때가 많습니다. 아래의 '상태', '크기' 필드는 레이블이 아닌 값으로 표시되어 있어 보기가 불편합니다.

아직 FE 작업을 하지않아 보기 불편..

이번 포스팅에서는 Choices 필드의 레이블을 표시하는 방법을 알아보겠습니다. 결론부터 말씀드리자면 get_(Value)_display() 메서드를 사용하여 레이블로 표시하는데 그 사용 방법을 알아보겠습니다.


1. 모델 설정

먼저, 모델에 Choices 필드를 추가해야 합니다. 오늘 예시는 제가 현재 진행하고 있는 프로젝트의 모델을 사용하겠습니다. 과일 주문 시스템에서 Order 모델에는 과일 크기(SIZE_CHOICES)와 주문 상태(STATUS_CHOICES)라는 Choices 필드가 있습니다. 모델에서 해당 부분을 가져왔습니다.

class Order(models.Model):
    SIZE_CHOICES = [
        ('small', '소과'),
        ('big', '대과'),
    ]

    STATUS_CHOICES = [
        ('pending', '입금확인중'),
        ('preparing', '배송 준비중'),
        ('shipping', '배송중'),
        ('completed', '배송완료'),
    ]

    size = models.CharField(max_length=5, choices=SIZE_CHOICES)
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='입금 확인 중')

2. 템플릿에서 get_(value)_display 메서드 사용

템플릿에서 레이블로 표시하기 위해 Django의 get_(Value)_display() 메서드를 사용합니다. 사용법은 간단하게 (Value) 부분을 필드명으로 바꿔주면 됩니다.

{% extends 'base.html' %}

{% block content %}
<h2>주문 목록</h2>
<table>
    <thead>
        <tr>
            '''
            (생략)
            '''
            <th>연락처</th>
            <th>상태</th>
            <th>상품</th>
            <th>크기</th>
        </tr>
    </thead>
    <tbody>
        {% for order in orders %}
        <tr>
            '''
            (생략)
            '''
            <td>{{ order.contact }}</td>
            <td>{{ order.get_status_display }}</td>
            <td>{{ order.item.name }}</td>
            <td>{{ order.get_size_display }}</td>
        </tr>
        {% endfor %}
    </tbody>
</table>
{% endblock %}
참 쉽죠?

결과 확인

야호

이렇게 Choices 필드의 값을 레이블로 표시하여 사용자가 볼 때 더 편하게 만들어줍시다!

get_value_display() 메서드는 DB에 저장된 필드 값을 해당하는 레이블로 변환하여 템플릿에 렌더링 합니다.

 

728x90

관련글 더보기

댓글 영역