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

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

이번 포스팅에서는 Choices 필드의 레이블을 표시하는 방법을 알아보겠습니다. 결론부터 말씀드리자면 get_(Value)_display() 메서드를 사용하여 레이블로 표시하는데 그 사용 방법을 알아보겠습니다.
먼저, 모델에 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='입금 확인 중')
템플릿에서 레이블로 표시하기 위해 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에 저장된 필드 값을 해당하는 레이블로 변환하여 템플릿에 렌더링 합니다.
| [Django] 배포 후 Admin 페이지 CSS 깨짐 현상 (2) | 2025.07.24 |
|---|---|
| [Django] Auth Validator 에러 메시지 수정하기 (0) | 2024.07.06 |
| [Django] 개발 환경 세팅 (0) | 2024.06.28 |
| [Python] 윈도우 cmd 에서 python 명령어 안 될 때 (0) | 2024.06.20 |
| [Django Error] 에러 getaddrinfo failed (0) | 2023.06.21 |
댓글 영역