장고 모델 선택필드

Pywiki
Sam (토론 | 기여)님의 2021년 6월 22일 (화) 12:59 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 가기 검색하러 가기

1 개요[편집 | 원본 편집]

무언가를 입력할 때 자유롭게 입력하는 게 아닌, 선택에 제약을 주고자 할 때 사용하는 기능.

기본적으로 ChoiceField 는 따로 없기때문에 CharField에서 옵션을 사용하는 방식으로 구현한다.

혹은 ForeignKey로 다른 모델과 연결해두면 해당 모델 안의 객체에서만 선택할 수 있다.

2 정의[편집 | 원본 편집]

from django.db import models

class 모델명(models.Model):  # 이게 하나의 테이블이 된다.
    선택지 = (  # 이중튜플로 선택지를지정한다.
    	('DB에저장되는 내용1', '폼 등에서 표시하는값1'),
        ('DB에저장되는 내용2', '폼 등에서 표시하는값'2),
        ...
        )
    선택속성 = models.CharField(choices=선택지, max_length=5, blank=False)  # 옵션은 알아서.
    # max_length 옵션은 DB에 저장되는 데이터에 걸리는 제약.
    선택속성2 = models.ForeignKey(선택모델,on_delete=models.CASCADE, null=True, blank=True)

3 탬플릿에서 사용[편집 | 원본 편집]

<select class='알아서' data-title="제목" data-style="알아서" data-menu-style="알아서">
    {% for x,y in form.fields.선택속성.choices %}
       <option value="{{ x }}"{% if form.fields.gender.value == x %} selected{% endif %}>{{ y }}</option>
    {% endfor %}
    </select>

3.1 탬플릿에서 선택값 출력[편집 | 원본 편집]

{{모델.속성}} 이 형태로 쓰면 DB에 기록된 형태의 데이터를 보여주고,

{{모델.get_속성명_display}}로 쓰면 사용자에게 보여지는 형태의 데이터를 보여준다.